<!DOCTYPE html>
<html lang="" xml:lang="">
<head>

  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <title>1 Linux初探，打开新世界的大门 | Linux学习</title>
  <meta name="description" content="1 Linux初探，打开新世界的大门 | Linux学习" />
  <meta name="generator" content="bookdown 0.45 and GitBook 2.6.7" />

  <meta property="og:title" content="1 Linux初探，打开新世界的大门 | Linux学习" />
  <meta property="og:type" content="book" />
  
  
  

  <meta name="twitter:card" content="summary" />
  <meta name="twitter:title" content="1 Linux初探，打开新世界的大门 | Linux学习" />
  
  
  

<meta name="author" content="易生信" />
<meta name="author" content="www.bic.ac.cn/Training" />


<meta name="date" content="2025-10-31" />

  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <meta name="apple-mobile-web-app-capable" content="yes" />
  <meta name="apple-mobile-web-app-status-bar-style" content="black" />
  
  
<link rel="prev" href="index.html"/>
<link rel="next" href="softinstall.html"/>
<script src="libs/jquery-3.6.0/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@6.4.6/dist/fuse.min.js"></script>
<link href="libs/gitbook-2.6.7/css/style.css" rel="stylesheet" />
<link href="libs/gitbook-2.6.7/css/plugin-table.css" rel="stylesheet" />
<link href="libs/gitbook-2.6.7/css/plugin-bookdown.css" rel="stylesheet" />
<link href="libs/gitbook-2.6.7/css/plugin-highlight.css" rel="stylesheet" />
<link href="libs/gitbook-2.6.7/css/plugin-search.css" rel="stylesheet" />
<link href="libs/gitbook-2.6.7/css/plugin-fontsettings.css" rel="stylesheet" />
<link href="libs/gitbook-2.6.7/css/plugin-clipboard.css" rel="stylesheet" />








<link href="libs/anchor-sections-1.1.0/anchor-sections.css" rel="stylesheet" />
<link href="libs/anchor-sections-1.1.0/anchor-sections-hash.css" rel="stylesheet" />
<script src="libs/anchor-sections-1.1.0/anchor-sections.js"></script>


<style type="text/css">
html { -webkit-text-size-adjust: 100%; }
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
  { counter-reset: source-line 0; }
pre.numberSource code > span
  { position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
  { content: counter(source-line);
    position: relative; left: -1em; text-align: right; vertical-align: baseline;
    border: none; display: inline-block;
    -webkit-touch-callout: none; -webkit-user-select: none;
    -khtml-user-select: none; -moz-user-select: none;
    -ms-user-select: none; user-select: none;
    padding: 0 4px; width: 4em;
    color: #aaaaaa;
  }
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa;  padding-left: 4px; }
div.sourceCode
  {   }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code span.at { color: #7d9029; } /* Attribute */
code span.bn { color: #40a070; } /* BaseN */
code span.bu { color: #008000; } /* BuiltIn */
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code span.ch { color: #4070a0; } /* Char */
code span.cn { color: #880000; } /* Constant */
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
code span.dt { color: #902000; } /* DataType */
code span.dv { color: #40a070; } /* DecVal */
code span.er { color: #ff0000; font-weight: bold; } /* Error */
code span.ex { } /* Extension */
code span.fl { color: #40a070; } /* Float */
code span.fu { color: #06287e; } /* Function */
code span.im { color: #008000; font-weight: bold; } /* Import */
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
code span.op { color: #666666; } /* Operator */
code span.ot { color: #007020; } /* Other */
code span.pp { color: #bc7a00; } /* Preprocessor */
code span.sc { color: #4070a0; } /* SpecialChar */
code span.ss { color: #bb6688; } /* SpecialString */
code span.st { color: #4070a0; } /* String */
code span.va { color: #19177c; } /* Variable */
code span.vs { color: #4070a0; } /* VerbatimString */
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
</style>

<style type="text/css">
  
  div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
</style>

<link rel="stylesheet" href="style.css" type="text/css" />
</head>

<body>



  <div class="book without-animation with-summary font-size-2 font-family-1" data-basepath=".">

    <div class="book-summary">
      <nav role="navigation">

<ul class="summary">
<li><a href="http://https://mp.weixin.qq.com/s/i71OMaUu6QtcY0pt1njHQA">Hello</a></li>

<li class="divider"></li>
<li class="chapter" data-level="" data-path="index.html"><a href="index.html"><i class="fa fa-check"></i>前沿</a></li>
<li class="chapter" data-level="1" data-path="linux_basic.html"><a href="linux_basic.html"><i class="fa fa-check"></i><b>1</b> Linux初探，打开新世界的大门</a>
<ul>
<li class="chapter" data-level="1.1" data-path="linux_basic.html"><a href="linux_basic.html#basicDir"><i class="fa fa-check"></i><b>1.1</b> Linux系统简介和目录理解</a>
<ul>
<li class="chapter" data-level="1.1.1" data-path="linux_basic.html"><a href="linux_basic.html#why_linux"><i class="fa fa-check"></i><b>1.1.1</b> 为什么要用Linux系统</a></li>
<li class="chapter" data-level="1.1.2" data-path="linux_basic.html"><a href="linux_basic.html#linux_everywhere"><i class="fa fa-check"></i><b>1.1.2</b> Linux系统无处不在</a></li>
<li class="chapter" data-level="1.1.3" data-path="linux_basic.html"><a href="linux_basic.html#free_linux"><i class="fa fa-check"></i><b>1.1.3</b> 免费的Linux系统来一套</a></li>
<li class="chapter" data-level="1.1.4" data-path="linux_basic.html"><a href="linux_basic.html#linux_login"><i class="fa fa-check"></i><b>1.1.4</b> Linux系统登录-联系远方的她</a></li>
<li class="chapter" data-level="1.1.5" data-path="linux_basic.html"><a href="linux_basic.html#linux_cmd"><i class="fa fa-check"></i><b>1.1.5</b> 初识Linux系统 - 黑夜中的闪烁是你的落脚点</a></li>
<li class="chapter" data-level="1.1.6" data-path="linux_basic.html"><a href="linux_basic.html#my_computer"><i class="fa fa-check"></i><b>1.1.6</b> 我的电脑在哪？</a></li>
<li class="chapter" data-level="1.1.7" data-path="linux_basic.html"><a href="linux_basic.html#linux_system_hardware"><i class="fa fa-check"></i><b>1.1.7</b> 系统配置怎样？来看看256M硬盘的服务器</a></li>
<li class="chapter" data-level="1.1.8" data-path="linux_basic.html"><a href="linux_basic.html#directpry_show"><i class="fa fa-check"></i><b>1.1.8</b> 看下目录下都有什么</a></li>
<li class="chapter" data-level="1.1.9" data-path="linux_basic.html"><a href="linux_basic.html#mkdir"><i class="fa fa-check"></i><b>1.1.9</b> 新建一个目录</a></li>
<li class="chapter" data-level="1.1.10" data-path="linux_basic.html"><a href="linux_basic.html#cat_file"><i class="fa fa-check"></i><b>1.1.10</b> 访问文件</a></li>
<li class="chapter" data-level="1.1.11" data-path="linux_basic.html"><a href="linux_basic.html#com_parameter_help"><i class="fa fa-check"></i><b>1.1.11</b> 查看帮助，获取可用命令行参数</a></li>
<li class="chapter" data-level="1.1.12" data-path="linux_basic.html"><a href="linux_basic.html#first_summary"><i class="fa fa-check"></i><b>1.1.12</b> 小结</a></li>
<li class="chapter" data-level="1.1.13" data-path="linux_basic.html"><a href="linux_basic.html#first_exercise"><i class="fa fa-check"></i><b>1.1.13</b> 做个小测试</a></li>
</ul></li>
<li class="chapter" data-level="1.2" data-path="linux_basic.html"><a href="linux_basic.html#fileoperation"><i class="fa fa-check"></i><b>1.2</b> Linux下文件操作</a>
<ul>
<li class="chapter" data-level="1.2.1" data-path="linux_basic.html"><a href="linux_basic.html#tac_rev"><i class="fa fa-check"></i><b>1.2.1</b> 文件按行翻转和按列翻转</a></li>
<li class="chapter" data-level="1.2.2" data-path="linux_basic.html"><a href="linux_basic.html#new_file"><i class="fa fa-check"></i><b>1.2.2</b> 新建文件的n种方式</a></li>
<li class="chapter" data-level="1.2.3" data-path="linux_basic.html"><a href="linux_basic.html#file_cp_mv_rename_link"><i class="fa fa-check"></i><b>1.2.3</b> 文件拷贝、移动、重命名、软链</a></li>
<li class="chapter" data-level="1.2.4" data-path="linux_basic.html"><a href="linux_basic.html#linux_abnormal"><i class="fa fa-check"></i><b>1.2.4</b> Linux下命令的一些突发事故</a></li>
<li class="chapter" data-level="1.2.5" data-path="linux_basic.html"><a href="linux_basic.html#file_op_gzip_wc"><i class="fa fa-check"></i><b>1.2.5</b> 了解和操作你的文件</a></li>
<li class="chapter" data-level="1.2.6" data-path="linux_basic.html"><a href="linux_basic.html#second_exercise"><i class="fa fa-check"></i><b>1.2.6</b> 小结和练习</a></li>
</ul></li>
<li class="chapter" data-level="1.3" data-path="linux_basic.html"><a href="linux_basic.html#shortcut"><i class="fa fa-check"></i><b>1.3</b> Linux终端常用快捷操作</a></li>
<li class="chapter" data-level="1.4" data-path="linux_basic.html"><a href="linux_basic.html#linuxSpecialSymbols"><i class="fa fa-check"></i><b>1.4</b> Linux 命令中的特殊符号</a></li>
<li class="chapter" data-level="1.5" data-path="linux_basic.html"><a href="linux_basic.html#stdinoutpipe"><i class="fa fa-check"></i><b>1.5</b> Linux下的标准输入、输出、重定向、管道</a></li>
<li class="chapter" data-level="1.6" data-path="linux_basic.html"><a href="linux_basic.html#filecontent"><i class="fa fa-check"></i><b>1.6</b> Linux文件内容操作</a>
<ul>
<li class="chapter" data-level="1.6.1" data-path="linux_basic.html"><a href="linux_basic.html#generate_file_seq"><i class="fa fa-check"></i><b>1.6.1</b> 命令组合生成文件</a></li>
<li class="chapter" data-level="1.6.2" data-path="linux_basic.html"><a href="linux_basic.html#sort_par"><i class="fa fa-check"></i><b>1.6.2</b> 文件排序原来有暗仓</a></li>
<li class="chapter" data-level="1.6.3" data-path="linux_basic.html"><a href="linux_basic.html#%E5%AE%9E%E6%88%98fasta%E5%BA%8F%E5%88%97%E6%8F%90%E5%8F%96-fasta_extract"><i class="fa fa-check"></i><b>1.6.3</b> 实战FASTA序列提取 [#fasta_extract}</a></li>
</ul></li>
<li class="chapter" data-level="1.7" data-path="linux_basic.html"><a href="linux_basic.html#linux_search"><i class="fa fa-check"></i><b>1.7</b> Linux下的查找命令 - 文件哪里跑</a>
<ul>
<li class="chapter" data-level="1.7.1" data-path="linux_basic.html"><a href="linux_basic.html#seach_cmmand"><i class="fa fa-check"></i><b>1.7.1</b> 命令/可执行程序查找 - 定位脚本的位置</a></li>
<li class="chapter" data-level="1.7.2" data-path="linux_basic.html"><a href="linux_basic.html#locate"><i class="fa fa-check"></i><b>1.7.2</b> locate普通文件快速定位</a></li>
<li class="chapter" data-level="1.7.3" data-path="linux_basic.html"><a href="linux_basic.html#find"><i class="fa fa-check"></i><b>1.7.3</b> find让文件无处可逃 find</a></li>
<li class="chapter" data-level="1.7.4" data-path="linux_basic.html"><a href="linux_basic.html#grep_file"><i class="fa fa-check"></i><b>1.7.4</b> 按文件内容查找 grep</a></li>
</ul></li>
<li class="chapter" data-level="1.8" data-path="linux_basic.html"><a href="linux_basic.html#grep_faster"><i class="fa fa-check"></i><b>1.8</b> 一句话加速grep近30倍</a>
<ul>
<li class="chapter" data-level="1.8.1" data-path="linux_basic.html"><a href="linux_basic.html#grep_single_gene"><i class="fa fa-check"></i><b>1.8.1</b> 获取单基因表达量</a></li>
<li class="chapter" data-level="1.8.2" data-path="linux_basic.html"><a href="linux_basic.html#grep_multiple_gene"><i class="fa fa-check"></i><b>1.8.2</b> 那如果获取多个基因怎么操作呢？</a></li>
</ul></li>
<li class="chapter" data-level="1.9" data-path="linux_basic.html"><a href="linux_basic.html#linux%E4%B8%8B%E7%9A%84%E6%89%B9%E9%87%8F%E6%93%8D%E4%BD%9C"><i class="fa fa-check"></i><b>1.9</b> Linux下的批量操作</a></li>
<li class="chapter" data-level="1.10" data-path="linux_basic.html"><a href="linux_basic.html#top"><i class="fa fa-check"></i><b>1.10</b> 监控程序的运行时间和资源占用</a></li>
<li class="chapter" data-level="1.11" data-path="linux_basic.html"><a href="linux_basic.html#%E4%B8%8D%E5%90%8C%E7%B3%BB%E7%BB%9F%E7%9A%84%E6%8D%A2%E8%A1%8C%E7%AC%A6%E4%B8%8D%E5%85%BC%E5%AE%B9%E5%BC%95%E5%8F%91%E7%9A%84%E9%97%AE%E9%A2%98"><i class="fa fa-check"></i><b>1.11</b> 不同系统的换行符不兼容引发的问题</a>
<ul>
<li class="chapter" data-level="1.11.1" data-path="linux_basic.html"><a href="linux_basic.html#winddows-%E7%9A%84%E7%A8%8B%E5%BA%8F%E4%BC%A0%E5%88%B0-linux%E4%B8%8D%E8%83%BD%E8%BF%90%E8%A1%8C"><i class="fa fa-check"></i><b>1.11.1</b> Winddows 的程序传到 Linux不能运行</a></li>
<li class="chapter" data-level="1.11.2" data-path="linux_basic.html"><a href="linux_basic.html#winddows-%E7%9A%84%E6%95%B0%E6%8D%AE%E4%BC%A0%E5%88%B0-linux%E4%B8%8D%E8%83%BD%E5%8C%B9%E9%85%8D"><i class="fa fa-check"></i><b>1.11.2</b> Winddows 的数据传到 Linux不能匹配</a></li>
<li class="chapter" data-level="1.11.3" data-path="linux_basic.html"><a href="linux_basic.html#linux-%E7%9A%84%E6%95%B0%E6%8D%AE%E4%BC%A0%E5%88%B0-windows-%E6%89%93%E5%BC%80%E4%B8%8D%E6%8D%A2%E8%A1%8C"><i class="fa fa-check"></i><b>1.11.3</b> Linux 的数据传到 Windows 打开不换行</a></li>
</ul></li>
<li class="chapter" data-level="1.12" data-path="linux_basic.html"><a href="linux_basic.html#references"><i class="fa fa-check"></i><b>1.12</b> References</a></li>
</ul></li>
<li class="chapter" data-level="2" data-path="softinstall.html"><a href="softinstall.html"><i class="fa fa-check"></i><b>2</b> Linux下软件安装相关</a>
<ul>
<li class="chapter" data-level="2.1" data-path="softinstall.html"><a href="softinstall.html#fileattributeplusX"><i class="fa fa-check"></i><b>2.1</b> 文件属性和可执行属性</a>
<ul>
<li class="chapter" data-level="2.1.1" data-path="softinstall.html"><a href="softinstall.html#fileattribute"><i class="fa fa-check"></i><b>2.1.1</b> 文件属性</a></li>
<li class="chapter" data-level="2.1.2" data-path="softinstall.html"><a href="softinstall.html#executable"><i class="fa fa-check"></i><b>2.1.2</b> 可执行属性</a></li>
</ul></li>
<li class="chapter" data-level="2.2" data-path="softinstall.html"><a href="softinstall.html#PATH_path_which"><i class="fa fa-check"></i><b>2.2</b> PATH和path，傻傻分不清</a>
<ul>
<li class="chapter" data-level="2.2.1" data-path="softinstall.html"><a href="softinstall.html#last_but_not_least"><i class="fa fa-check"></i><b>2.2.1</b> 小事也不能忽略</a></li>
</ul></li>
<li class="chapter" data-level="2.3" data-path="softinstall.html"><a href="softinstall.html#softInstallways"><i class="fa fa-check"></i><b>2.3</b> 软件安装的几种传统方式</a>
<ul>
<li class="chapter" data-level="2.3.1" data-path="softinstall.html"><a href="softinstall.html#system_package"><i class="fa fa-check"></i><b>2.3.1</b> 系统包管理器安装</a></li>
<li class="chapter" data-level="2.3.2" data-path="softinstall.html"><a href="softinstall.html#binary"><i class="fa fa-check"></i><b>2.3.2</b> 下载二进制文件</a></li>
<li class="chapter" data-level="2.3.3" data-path="softinstall.html"><a href="softinstall.html#configure_make_install"><i class="fa fa-check"></i><b>2.3.3</b> 源码编译安装</a></li>
<li class="chapter" data-level="2.3.4" data-path="softinstall.html"><a href="softinstall.html#pythonpac"><i class="fa fa-check"></i><b>2.3.4</b> Python包的安装</a></li>
<li class="chapter" data-level="2.3.5" data-path="softinstall.html"><a href="softinstall.html#anaconda_fear"><i class="fa fa-check"></i><b>2.3.5</b> Anaconda的两个福利</a></li>
<li class="chapter" data-level="2.3.6" data-path="softinstall.html"><a href="softinstall.html#R_install"><i class="fa fa-check"></i><b>2.3.6</b> R和R包的安装</a></li>
<li class="chapter" data-level="2.3.7" data-path="softinstall.html"><a href="softinstall.html#perl_package"><i class="fa fa-check"></i><b>2.3.7</b> Perl包的安装</a></li>
</ul></li>
<li class="chapter" data-level="2.4" data-path="softinstall.html"><a href="softinstall.html#condaInstall"><i class="fa fa-check"></i><b>2.4</b> Conda安装配置生物信息软件</a>
<ul>
<li class="chapter" data-level="2.4.1" data-path="softinstall.html"><a href="softinstall.html#condaInstallConfig"><i class="fa fa-check"></i><b>2.4.1</b> Conda安装和配置</a></li>
<li class="chapter" data-level="2.4.2" data-path="softinstall.html"><a href="softinstall.html#conda_basic"><i class="fa fa-check"></i><b>2.4.2</b> Conda基本使用</a></li>
<li class="chapter" data-level="2.4.3" data-path="softinstall.html"><a href="softinstall.html#conda_channel"><i class="fa fa-check"></i><b>2.4.3</b> Conda的channel</a></li>
<li class="chapter" data-level="2.4.4" data-path="softinstall.html"><a href="softinstall.html#conda_environment"><i class="fa fa-check"></i><b>2.4.4</b> 创建不同的软件运行环境</a></li>
<li class="chapter" data-level="2.4.5" data-path="softinstall.html"><a href="softinstall.html#remove_conda"><i class="fa fa-check"></i><b>2.4.5</b> 移除某个conda环境</a></li>
<li class="chapter" data-level="2.4.6" data-path="softinstall.html"><a href="softinstall.html#conda-R"><i class="fa fa-check"></i><b>2.4.6</b> Conda配置R</a></li>
<li class="chapter" data-level="2.4.7" data-path="softinstall.html"><a href="softinstall.html#conda_simple"><i class="fa fa-check"></i><b>2.4.7</b> Conda环境简化运行</a></li>
<li class="chapter" data-level="2.4.8" data-path="softinstall.html"><a href="softinstall.html#conda_bak"><i class="fa fa-check"></i><b>2.4.8</b> Conda环境备份</a></li>
<li class="chapter" data-level="2.4.9" data-path="softinstall.html"><a href="softinstall.html#conda_import"><i class="fa fa-check"></i><b>2.4.9</b> Conda环境导出和导入</a></li>
<li class="chapter" data-level="2.4.10" data-path="softinstall.html"><a href="softinstall.html#cond_segment_fault"><i class="fa fa-check"></i><b>2.4.10</b> Conda软件安装 core dump error/Segment fault/段错误 怎么办</a></li>
<li class="chapter" data-level="2.4.11" data-path="softinstall.html"><a href="softinstall.html#conda_slow"><i class="fa fa-check"></i><b>2.4.11</b> Conda为什么越来越慢？</a></li>
<li class="chapter" data-level="2.4.12" data-path="softinstall.html"><a href="softinstall.html#conda_how_work"><i class="fa fa-check"></i><b>2.4.12</b> Conda是如何工作的</a></li>
<li class="chapter" data-level="2.4.13" data-path="softinstall.html"><a href="softinstall.html#cond_which_step_slow"><i class="fa fa-check"></i><b>2.4.13</b> Conda哪一步慢？</a></li>
<li class="chapter" data-level="2.4.14" data-path="softinstall.html"><a href="softinstall.html#cond_accelarate"><i class="fa fa-check"></i><b>2.4.14</b> 如何提速Conda</a></li>
<li class="chapter" data-level="2.4.15" data-path="softinstall.html"><a href="softinstall.html#conda_downlaod_fast"><i class="fa fa-check"></i><b>2.4.15</b> 下载提速</a></li>
<li class="chapter" data-level="2.4.16" data-path="softinstall.html"><a href="softinstall.html#conda_pack"><i class="fa fa-check"></i><b>2.4.16</b> 使用conda-pack直接从已经安装好的地方拷贝一份 (同一操作系统)</a></li>
</ul></li>
<li class="chapter" data-level="2.5" data-path="softinstall.html"><a href="softinstall.html#docker"><i class="fa fa-check"></i><b>2.5</b> Docker安装</a>
<ul>
<li class="chapter" data-level="2.5.1" data-path="softinstall.html"><a href="softinstall.html#docker_what"><i class="fa fa-check"></i><b>2.5.1</b> Docker能做什么</a></li>
<li class="chapter" data-level="2.5.2" data-path="softinstall.html"><a href="softinstall.html#docker_basic"><i class="fa fa-check"></i><b>2.5.2</b> Docker的几个基本概念</a></li>
<li class="chapter" data-level="2.5.3" data-path="softinstall.html"><a href="softinstall.html#docker_install"><i class="fa fa-check"></i><b>2.5.3</b> 安装和配置</a></li>
<li class="chapter" data-level="2.5.4" data-path="softinstall.html"><a href="softinstall.html#docker_priviledges"><i class="fa fa-check"></i><b>2.5.4</b> Docker用户权限</a></li>
<li class="chapter" data-level="2.5.5" data-path="softinstall.html"><a href="softinstall.html#docker_try"><i class="fa fa-check"></i><b>2.5.5</b> Docker试用</a></li>
<li class="chapter" data-level="2.5.6" data-path="softinstall.html"><a href="softinstall.html#docker_basic_operation"><i class="fa fa-check"></i><b>2.5.6</b> Docker系统基本操作</a></li>
<li class="chapter" data-level="2.5.7" data-path="softinstall.html"><a href="softinstall.html#Dockerfile"><i class="fa fa-check"></i><b>2.5.7</b> 使用Dockerfile自动构建镜像</a></li>
<li class="chapter" data-level="2.5.8" data-path="softinstall.html"><a href="softinstall.html#docker_single_process"><i class="fa fa-check"></i><b>2.5.8</b> Docker的特征</a></li>
<li class="chapter" data-level="2.5.9" data-path="softinstall.html"><a href="softinstall.html#docker_attention"><i class="fa fa-check"></i><b>2.5.9</b> Docker使用注意</a></li>
</ul></li>
<li class="chapter" data-level="2.6" data-path="softinstall.html"><a href="softinstall.html#makefile"><i class="fa fa-check"></i><b>2.6</b> Makefile知识</a>
<ul>
<li class="chapter" data-level="2.6.1" data-path="softinstall.html"><a href="softinstall.html#docker_ref"><i class="fa fa-check"></i><b>2.6.1</b> 参考</a></li>
</ul></li>
<li class="chapter" data-level="2.7" data-path="softinstall.html"><a href="softinstall.html#references-1"><i class="fa fa-check"></i><b>2.7</b> References</a></li>
</ul></li>
<li class="chapter" data-level="3" data-path="LinuxGreatTools.html"><a href="LinuxGreatTools.html"><i class="fa fa-check"></i><b>3</b> Linux神器</a>
<ul>
<li class="chapter" data-level="3.1" data-path="LinuxGreatTools.html"><a href="LinuxGreatTools.html#regularExpr"><i class="fa fa-check"></i><b>3.1</b> 正则表达式替换文本随心所欲</a></li>
<li class="chapter" data-level="3.2" data-path="LinuxGreatTools.html"><a href="LinuxGreatTools.html#awk"><i class="fa fa-check"></i><b>3.2</b> awk-生信分析不可缺少</a>
<ul>
<li class="chapter" data-level="3.2.1" data-path="LinuxGreatTools.html"><a href="LinuxGreatTools.html#awk_explain"><i class="fa fa-check"></i><b>3.2.1</b> awk基本参数解释</a></li>
<li class="chapter" data-level="3.2.2" data-path="LinuxGreatTools.html"><a href="LinuxGreatTools.html#awk_common_op"><i class="fa fa-check"></i><b>3.2.2</b> awk基本常见操作</a></li>
<li class="chapter" data-level="3.2.3" data-path="LinuxGreatTools.html"><a href="LinuxGreatTools.html#awk_combine"><i class="fa fa-check"></i><b>3.2.3</b> awk糅合操作 - 命令组合体现魅力</a></li>
</ul></li>
<li class="chapter" data-level="3.3" data-path="LinuxGreatTools.html"><a href="LinuxGreatTools.html#sed"><i class="fa fa-check"></i><b>3.3</b> SED命令 - 文本替换舍我其谁</a>
<ul>
<li class="chapter" data-level="3.3.1" data-path="LinuxGreatTools.html"><a href="LinuxGreatTools.html#sed_basic"><i class="fa fa-check"></i><b>3.3.1</b> sed基本参数解释</a></li>
<li class="chapter" data-level="3.3.2" data-path="LinuxGreatTools.html"><a href="LinuxGreatTools.html#sed_common"><i class="fa fa-check"></i><b>3.3.2</b> 常见操作</a></li>
</ul></li>
<li class="chapter" data-level="3.4" data-path="LinuxGreatTools.html"><a href="LinuxGreatTools.html#vim"><i class="fa fa-check"></i><b>3.4</b> VIM的使用</a>
<ul>
<li class="chapter" data-level="3.4.1" data-path="LinuxGreatTools.html"><a href="LinuxGreatTools.html#vim_first"><i class="fa fa-check"></i><b>3.4.1</b> 初识VIM</a></li>
<li class="chapter" data-level="3.4.2" data-path="LinuxGreatTools.html"><a href="LinuxGreatTools.html#vim_re"><i class="fa fa-check"></i><b>3.4.2</b> VIM中使用正则表达式</a></li>
</ul></li>
<li class="chapter" data-level="3.5" data-path="LinuxGreatTools.html"><a href="LinuxGreatTools.html#rename_all"><i class="fa fa-check"></i><b>3.5</b> 有了这些，文件批量重命名还需要求助其它工具吗？</a>
<ul>
<li class="chapter" data-level="3.5.1" data-path="LinuxGreatTools.html"><a href="LinuxGreatTools.html#rename_simple"><i class="fa fa-check"></i><b>3.5.1</b> 简单重命名</a></li>
<li class="chapter" data-level="3.5.2" data-path="LinuxGreatTools.html"><a href="LinuxGreatTools.html#rename_complex"><i class="fa fa-check"></i><b>3.5.2</b> 复杂重命名</a></li>
</ul></li>
<li class="chapter" data-level="3.6" data-path="LinuxGreatTools.html"><a href="LinuxGreatTools.html#nohup"><i class="fa fa-check"></i><b>3.6</b> 耗时很长的程序忘加nohup就运行了怎么办？</a></li>
<li class="chapter" data-level="3.7" data-path="LinuxGreatTools.html"><a href="LinuxGreatTools.html#references-2"><i class="fa fa-check"></i><b>3.7</b> References</a></li>
</ul></li>
<li class="chapter" data-level="4" data-path="bash_string.html"><a href="bash_string.html"><i class="fa fa-check"></i><b>4</b> Bash 字符串处理</a>
<ul>
<li class="chapter" data-level="4.1" data-path="bash_string.html"><a href="bash_string.html#bash_specific"><i class="fa fa-check"></i><b>4.1</b> Bash特殊字符</a></li>
<li class="chapter" data-level="4.2" data-path="bash_string.html"><a href="bash_string.html#bash_variable"><i class="fa fa-check"></i><b>4.2</b> Bash变量</a></li>
<li class="chapter" data-level="4.3" data-path="bash_string.html"><a href="bash_string.html#bash_operator"><i class="fa fa-check"></i><b>4.3</b> Bash操作符</a></li>
<li class="chapter" data-level="4.4" data-path="bash_string.html"><a href="bash_string.html#bash_logic"><i class="fa fa-check"></i><b>4.4</b> Shell中条件和test命令</a></li>
<li class="chapter" data-level="4.5" data-path="bash_string.html"><a href="bash_string.html#bash_flow"><i class="fa fa-check"></i><b>4.5</b> Shell流控制</a></li>
<li class="chapter" data-level="4.6" data-path="bash_string.html"><a href="bash_string.html#bash_function"><i class="fa fa-check"></i><b>4.6</b> Shell函数</a></li>
<li class="chapter" data-level="4.7" data-path="bash_string.html"><a href="bash_string.html#bash_inputoutput"><i class="fa fa-check"></i><b>4.7</b> 输入输出</a></li>
<li class="chapter" data-level="4.8" data-path="bash_string.html"><a href="bash_string.html#command_parameter"><i class="fa fa-check"></i><b>4.8</b> 命令行处理 命令行处理命令</a></li>
<li class="chapter" data-level="4.9" data-path="bash_string.html"><a href="bash_string.html#process_monitor"><i class="fa fa-check"></i><b>4.9</b> 进程和作业控制</a></li>
</ul></li>
<li class="chapter" data-level="5" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html"><i class="fa fa-check"></i><b>5</b> Bioinfo tools</a>
<ul>
<li class="chapter" data-level="5.1" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#cas9"><i class="fa fa-check"></i><b>5.1</b> 寻找Cas9的同源基因并进行进化分析</a></li>
<li class="chapter" data-level="5.2" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#biomart_motif"><i class="fa fa-check"></i><b>5.2</b> 如何获取目标基因的转录因子（上）——biomart下载基因和motif位置信息</a>
<ul>
<li class="chapter" data-level="5.2.1" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#biomart_motif_1"><i class="fa fa-check"></i><b>5.2.1</b> 1. 文件准备</a></li>
<li class="chapter" data-level="5.2.2" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#biomart_motif_2"><i class="fa fa-check"></i><b>5.2.2</b> 2. 什么是bed文件？</a></li>
<li class="chapter" data-level="5.2.3" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#biomart_motif_3"><i class="fa fa-check"></i><b>5.2.3</b> 3. BioMart数据下载</a></li>
</ul></li>
<li class="chapter" data-level="5.3" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#biomart_motif_4"><i class="fa fa-check"></i><b>5.3</b> 如何获取目标基因的转录因子（下）——Linux命令获取目标基因TF</a>
<ul>
<li class="chapter" data-level="5.3.1" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#biomart_motif_5"><i class="fa fa-check"></i><b>5.3.1</b> 1. 基础回顾</a></li>
<li class="chapter" data-level="5.3.2" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#biomart_motif_6"><i class="fa fa-check"></i><b>5.3.2</b> 2. 文件格式处理</a></li>
<li class="chapter" data-level="5.3.3" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#biomart_motif_7"><i class="fa fa-check"></i><b>5.3.3</b> 3. 计算基因的启动子区</a></li>
<li class="chapter" data-level="5.3.4" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#biomart_motif_8"><i class="fa fa-check"></i><b>5.3.4</b> 4. 取两文件的交集</a></li>
<li class="chapter" data-level="5.3.5" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#biomart_motif_9"><i class="fa fa-check"></i><b>5.3.5</b> 5. 提取我们关注的基因</a></li>
<li class="chapter" data-level="5.3.6" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#biomart_motif_10"><i class="fa fa-check"></i><b>5.3.6</b> 重点总结</a></li>
</ul></li>
<li class="chapter" data-level="5.4" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#emboss"><i class="fa fa-check"></i><b>5.4</b> emboss的使用</a></li>
<li class="chapter" data-level="5.5" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#samtools_snp"><i class="fa fa-check"></i><b>5.5</b> 使用samtools计算SNP</a></li>
<li class="chapter" data-level="5.6" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#bedtools"><i class="fa fa-check"></i><b>5.6</b> Bedtools使用</a></li>
<li class="chapter" data-level="5.7" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#sra_tools"><i class="fa fa-check"></i><b>5.7</b> SRA toolkit使用</a></li>
<li class="chapter" data-level="5.8" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#bioinfo_pipeline"><i class="fa fa-check"></i><b>5.8</b> 生信流程开发</a></li>
<li class="chapter" data-level="5.9" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#rsync"><i class="fa fa-check"></i><b>5.9</b> 数据同步和备份</a>
<ul>
<li class="chapter" data-level="5.9.1" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#scp"><i class="fa fa-check"></i><b>5.9.1</b> 原创拷贝scp</a></li>
<li class="chapter" data-level="5.9.2" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#rsync1"><i class="fa fa-check"></i><b>5.9.2</b> 镜像备份和增量同步 rsync</a></li>
<li class="chapter" data-level="5.9.3" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#rdiff_backup"><i class="fa fa-check"></i><b>5.9.3</b> 增量备份，记录各个版本 rdiff-backup</a></li>
</ul></li>
<li class="chapter" data-level="5.10" data-path="bioinfo-tools.html"><a href="bioinfo-tools.html#references-3"><i class="fa fa-check"></i><b>5.10</b> References</a></li>
</ul></li>
<li class="chapter" data-level="6" data-path="bioinfo_linux.html"><a href="bioinfo_linux.html"><i class="fa fa-check"></i><b>6</b> 生物信息中Linux命令练习</a>
<ul>
<li class="chapter" data-level="6.1" data-path="bioinfo_linux.html"><a href="bioinfo_linux.html#gtf_chr"><i class="fa fa-check"></i><b>6.1</b> 统计GTF文件中染色体数目？</a></li>
<li class="chapter" data-level="6.2" data-path="bioinfo_linux.html"><a href="bioinfo_linux.html#gtf_num_gene"><i class="fa fa-check"></i><b>6.2</b> 统计GTF文件中基因数目？</a></li>
<li class="chapter" data-level="6.3" data-path="bioinfo_linux.html"><a href="bioinfo_linux.html#gtf_exon_length"><i class="fa fa-check"></i><b>6.3</b> 计算GTF中外显子总长度？</a></li>
<li class="chapter" data-level="6.4" data-path="bioinfo_linux.html"><a href="bioinfo_linux.html#gtf_transcript_num"><i class="fa fa-check"></i><b>6.4</b> 计算GTF文件中基因所拥有的平均转录本数目</a></li>
<li class="chapter" data-level="6.5" data-path="bioinfo_linux.html"><a href="bioinfo_linux.html#fasta"><i class="fa fa-check"></i><b>6.5</b> 生成一个多行Fasta测试序列供后续运算 (也可使用我们前面提供的脚本生成)</a></li>
<li class="chapter" data-level="6.6" data-path="bioinfo_linux.html"><a href="bioinfo_linux.html#fasta_uppercase"><i class="fa fa-check"></i><b>6.6</b> <code>test.fa</code>中的序列全转成大写</a></li>
<li class="chapter" data-level="6.7" data-path="bioinfo_linux.html"><a href="bioinfo_linux.html#fasta_len"><i class="fa fa-check"></i><b>6.7</b> 计算多行FASTA文件<code>test.fa</code>中每条序列长度</a></li>
<li class="chapter" data-level="6.8" data-path="bioinfo_linux.html"><a href="bioinfo_linux.html#fasta_format"><i class="fa fa-check"></i><b>6.8</b> 多行FASTA转单行FASTA序列</a></li>
<li class="chapter" data-level="6.9" data-path="bioinfo_linux.html"><a href="bioinfo_linux.html#fasta_name"><i class="fa fa-check"></i><b>6.9</b> 取出单行FASTA文件中序列长度大于40的序列的名字</a></li>
<li class="chapter" data-level="6.10" data-path="bioinfo_linux.html"><a href="bioinfo_linux.html#id_extract"><i class="fa fa-check"></i><b>6.10</b> 分别用<code>awk</code>和<code>grep</code>从<code>test.fa</code>中提取给定ID对应的序列</a></li>
<li class="chapter" data-level="6.11" data-path="bioinfo_linux.html"><a href="bioinfo_linux.html#standard"><i class="fa fa-check"></i><b>6.11</b> 利用AWK对基因表达数据进行标准化</a></li>
<li class="chapter" data-level="6.12" data-path="bioinfo_linux.html"><a href="bioinfo_linux.html#skip_first_row"><i class="fa fa-check"></i><b>6.12</b> 写出3种写法，去掉上一题<code>test.expr</code>矩阵中的第一行？</a></li>
<li class="chapter" data-level="6.13" data-path="bioinfo_linux.html"><a href="bioinfo_linux.html#add_row"><i class="fa fa-check"></i><b>6.13</b> 分别用<code>awk</code>和<code>sed</code>给<code>test.expr</code>矩阵加上标题行？</a></li>
<li class="chapter" data-level="6.14" data-path="bioinfo_linux.html"><a href="bioinfo_linux.html#bam"><i class="fa fa-check"></i><b>6.14</b> 给定一个<code>BAM</code>文件，怎么计算有多少基因组区域被测到了？平均测序深度是多少？</a></li>
<li class="chapter" data-level="6.15" data-path="bioinfo_linux.html"><a href="bioinfo_linux.html#jaccard"><i class="fa fa-check"></i><b>6.15</b> 如何使用<code>bedtools</code>的其它工具或其它Linux命令实现<code>bedtools jaccard</code>子功能？</a></li>
</ul></li>
<li class="chapter" data-level="7" data-path="supplemental.html"><a href="supplemental.html"><i class="fa fa-check"></i><b>7</b> Supplemental</a></li>
<li class="chapter" data-level="8" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html"><i class="fa fa-check"></i><b>8</b> 生信教程文章集锦</a>
<ul>
<li class="chapter" data-level="8.1" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E7%94%9F%E4%BF%A1%E5%AE%9D%E5%85%B8"><i class="fa fa-check"></i><b>8.1</b> 生信宝典</a>
<ul>
<li class="chapter" data-level="8.1.1" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8B"><i class="fa fa-check"></i><b>8.1.1</b> 系列教程</a></li>
<li class="chapter" data-level="8.1.2" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#ngs%E5%88%86%E6%9E%90%E5%B7%A5%E5%85%B7%E8%AF%84%E4%BC%B0"><i class="fa fa-check"></i><b>8.1.2</b> NGS分析工具评估</a></li>
<li class="chapter" data-level="8.1.3" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E5%AE%8F%E5%9F%BA%E5%9B%A0%E7%BB%84%E6%95%99%E7%A8%8B"><i class="fa fa-check"></i><b>8.1.3</b> 宏基因组教程</a></li>
<li class="chapter" data-level="8.1.4" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E7%B3%BB%E5%88%97%E5%AE%A3%E4%BC%A0"><i class="fa fa-check"></i><b>8.1.4</b> 系列宣传</a></li>
<li class="chapter" data-level="8.1.5" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E7%94%9F%E4%BF%A1%E7%94%9F%E7%89%A9%E7%9F%A5%E8%AF%86"><i class="fa fa-check"></i><b>8.1.5</b> 生信生物知识</a></li>
<li class="chapter" data-level="8.1.6" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E6%96%87%E7%8C%AE%E7%B2%BE%E8%AF%BB"><i class="fa fa-check"></i><b>8.1.6</b> 文献精读</a></li>
<li class="chapter" data-level="8.1.7" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#linux"><i class="fa fa-check"></i><b>8.1.7</b> Linux</a></li>
<li class="chapter" data-level="8.1.8" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#circos%E7%B3%BB%E5%88%97"><i class="fa fa-check"></i><b>8.1.8</b> CIRCOS系列</a></li>
<li class="chapter" data-level="8.1.9" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#r%E7%BB%9F%E8%AE%A1%E5%92%8C%E4%BD%9C%E5%9B%BE"><i class="fa fa-check"></i><b>8.1.9</b> R统计和作图</a></li>
<li class="chapter" data-level="8.1.10" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E6%89%A9%E5%A2%9E%E5%AD%90%E4%B8%89%E6%AD%A5%E6%9B%B2"><i class="fa fa-check"></i><b>8.1.10</b> 扩增子三步曲</a></li>
<li class="chapter" data-level="8.1.11" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E5%AE%8F%E5%9F%BA%E5%9B%A0%E7%BB%84%E5%88%86%E6%9E%90%E4%B8%93%E9%A2%98"><i class="fa fa-check"></i><b>8.1.11</b> 宏基因组分析专题</a></li>
<li class="chapter" data-level="8.1.12" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#ngs%E5%9F%BA%E7%A1%80"><i class="fa fa-check"></i><b>8.1.12</b> NGS基础</a></li>
<li class="chapter" data-level="8.1.13" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E7%99%8C%E7%97%87%E6%95%B0%E6%8D%AE%E5%BA%93"><i class="fa fa-check"></i><b>8.1.13</b> 癌症数据库</a></li>
<li class="chapter" data-level="8.1.14" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#python"><i class="fa fa-check"></i><b>8.1.14</b> Python</a></li>
<li class="chapter" data-level="8.1.15" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#ngs%E8%BD%AF%E4%BB%B6"><i class="fa fa-check"></i><b>8.1.15</b> NGS软件</a></li>
<li class="chapter" data-level="8.1.16" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#cytoscape%E7%BD%91%E7%BB%9C%E5%9B%BE"><i class="fa fa-check"></i><b>8.1.16</b> Cytoscape网络图</a></li>
<li class="chapter" data-level="8.1.17" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E5%88%86%E5%AD%90%E5%AF%B9%E6%8E%A5"><i class="fa fa-check"></i><b>8.1.17</b> 分子对接</a></li>
<li class="chapter" data-level="8.1.18" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E7%94%9F%E4%BF%A1%E5%AE%9D%E5%85%B8%E4%B9%8B%E5%82%BB%E7%93%9C%E5%BC%8F"><i class="fa fa-check"></i><b>8.1.18</b> 生信宝典之傻瓜式</a></li>
<li class="chapter" data-level="8.1.19" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E7%94%9F%E4%BF%A1%E4%BA%BA%E5%86%99%E7%A8%8B%E5%BA%8F"><i class="fa fa-check"></i><b>8.1.19</b> 生信人写程序</a></li>
<li class="chapter" data-level="8.1.20" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E5%B0%8F%E6%8A%80%E5%B7%A7%E7%B3%BB%E5%88%97"><i class="fa fa-check"></i><b>8.1.20</b> 小技巧系列</a></li>
<li class="chapter" data-level="8.1.21" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E6%8B%9B%E8%81%98"><i class="fa fa-check"></i><b>8.1.21</b> 招聘</a></li>
</ul></li>
<li class="chapter" data-level="8.2" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E5%AE%8F%E5%9F%BA%E5%9B%A0%E7%BB%84"><i class="fa fa-check"></i><b>8.2</b> 宏基因组</a>
<ul>
<li class="chapter" data-level="8.2.1" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E7%B2%BE%E9%80%89%E6%96%87%E7%AB%A0%E6%8E%A8%E8%8D%90"><i class="fa fa-check"></i><b>8.2.1</b> 精选文章推荐</a></li>
<li class="chapter" data-level="8.2.2" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E5%9F%B9%E8%AE%AD%E4%BC%9A%E8%AE%AE%E5%BE%81%E7%A8%BF%E6%8B%9B%E8%81%98"><i class="fa fa-check"></i><b>8.2.2</b> 培训、会议、征稿、招聘</a></li>
<li class="chapter" data-level="8.2.3" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E7%A7%91%E7%A0%94%E7%BB%8F%E9%AA%8C"><i class="fa fa-check"></i><b>8.2.3</b> 科研经验</a></li>
<li class="chapter" data-level="8.2.4" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E8%BD%AF%E4%BB%B6%E5%92%8C%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BD%BF%E7%94%A8"><i class="fa fa-check"></i><b>8.2.4</b> 软件和数据库使用</a></li>
<li class="chapter" data-level="8.2.5" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E6%89%A9%E5%A2%9E%E5%AD%90%E5%AD%A6%E4%B9%A0%E4%B8%89%E6%AD%A5%E6%9B%B2"><i class="fa fa-check"></i><b>8.2.5</b> 扩增子学习三步曲</a></li>
<li class="chapter" data-level="8.2.6" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E5%AE%8F%E5%9F%BA%E5%9B%A0%E7%BB%84%E5%88%86%E6%9E%90%E4%B8%93%E9%A2%98-1"><i class="fa fa-check"></i><b>8.2.6</b> 宏基因组分析专题</a></li>
<li class="chapter" data-level="8.2.7" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#r%E7%BB%9F%E8%AE%A1%E7%BB%98%E5%9B%BE"><i class="fa fa-check"></i><b>8.2.7</b> R统计绘图</a></li>
<li class="chapter" data-level="8.2.8" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E5%AE%9E%E9%AA%8C%E8%AE%BE%E8%AE%A1%E4%B8%8E%E6%8A%80%E6%9C%AF"><i class="fa fa-check"></i><b>8.2.8</b> 实验设计与技术</a></li>
<li class="chapter" data-level="8.2.9" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86"><i class="fa fa-check"></i><b>8.2.9</b> 基础知识</a></li>
<li class="chapter" data-level="8.2.10" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E5%BF%85%E8%AF%BB%E7%BB%BC%E8%BF%B0"><i class="fa fa-check"></i><b>8.2.10</b> 必读综述</a></li>
<li class="chapter" data-level="8.2.11" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E9%AB%98%E5%88%86%E6%96%87%E7%AB%A0%E5%A5%97%E8%B7%AF%E8%A7%A3%E8%AF%BB"><i class="fa fa-check"></i><b>8.2.11</b> 高分文章套路解读</a></li>
<li class="chapter" data-level="8.2.12" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E7%A7%91%E6%99%AE%E8%A7%86%E9%A2%91-%E5%AF%93%E6%95%99%E4%BA%8E%E4%B9%90"><i class="fa fa-check"></i><b>8.2.12</b> 科普视频-寓教于乐</a></li>
<li class="chapter" data-level="8.2.13" data-path="生信教程文章集锦.html"><a href="生信教程文章集锦.html#%E5%8F%8B%E5%86%9B%E6%96%87%E7%AB%A0%E6%B1%87%E6%80%BB%E6%8E%A8%E8%8D%90"><i class="fa fa-check"></i><b>8.2.13</b> 友军文章汇总推荐</a></li>
</ul></li>
</ul></li>
<li class="divider"></li>
<li><a href="mailto:chentong_biology@163.com" target="blank">chentong_biology@163.com</a></li>

</ul>

      </nav>
    </div>

    <div class="book-body">
      <div class="body-inner">
        <div class="book-header" role="navigation">
          <h1>
            <i class="fa fa-circle-o-notch fa-spin"></i><a href="./">Linux学习</a>
          </h1>
        </div>

        <div class="page-wrapper" tabindex="-1" role="main">
          <div class="page-inner">

            <section class="normal" id="section-">
<div id="linux_basic" class="section level1 hasAnchor" number="1">
<h1><span class="header-section-number">1</span> Linux初探，打开新世界的大门<a href="linux_basic.html#linux_basic" class="anchor-section" aria-label="Anchor link to header"></a></h1>
<p>视频课程地址：</p>
<ul>
<li>B站 <a href="https://space.bilibili.com/362709786/lists/1012502?type=season" class="uri">https://space.bilibili.com/362709786/lists/1012502?type=season</a></li>
<li>知乎：<a href="https://www.zhihu.com/people/chen586" class="uri">https://www.zhihu.com/people/chen586</a></li>
<li>生信宝典视频号也有。</li>
</ul>
<div id="basicDir" class="section level2 hasAnchor" number="1.1">
<h2><span class="header-section-number">1.1</span> Linux系统简介和目录理解<a href="linux_basic.html#basicDir" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<div id="why_linux" class="section level3 hasAnchor" number="1.1.1">
<h3><span class="header-section-number">1.1.1</span> 为什么要用Linux系统<a href="linux_basic.html#why_linux" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>个人认为，Linux操作系统和类Linux操作系统的命令行界面是最适合进行生物信息分析的操作系统。原因有三点：</p>
<ul>
<li>长期运行的稳定性</li>
<li>多数软件只有Linux版本</li>
<li>强大的Bash命令简化繁琐的操作，尤其是大大简化重复性工作</li>
</ul>
<p>但对于初学者来说，接触和理解Linux操作系统需要一些时间和摸索。陡然从可视化点选操作的Windows进入到只有命令行界面的Linux，最大的陌生感是不知道做什么，不知道文件在哪？</p>
<p>我们这篇教程就带大家学习、熟悉、体会Linux系统的使用。</p>
</div>
<div id="linux_everywhere" class="section level3 hasAnchor" number="1.1.2">
<h3><span class="header-section-number">1.1.2</span> Linux系统无处不在<a href="linux_basic.html#linux_everywhere" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<ul>
<li><p>Linux是一种多用户、多任务的操作系统。最开始是由Linus Torvalds与1991年发布，后由社区维护，产生了不同的分发版。</p></li>
<li><p>常见版本有<code>Centos</code>, <code>Ubuntu</code>, <code>RedHat</code>, <code>Debian</code>等。服务器多用<code>Centos</code>系统，免费，稳定，但更新慢。<code>Ubuntu</code>系统更新快，注重界面的体验，适合自己笔记本安装。有面向中国的”麒麟”系统。其它两个没用过，<code>Centos</code>与<code>RedHat</code>, <code>Debian</code>与<code>Ubuntu</code>同宗，命令行操作起来很相似。</p></li>
</ul>
</div>
<div id="free_linux" class="section level3 hasAnchor" number="1.1.3">
<h3><span class="header-section-number">1.1.3</span> 免费的Linux系统来一套<a href="linux_basic.html#free_linux" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<ul>
<li>如果自己的单位有公有服务器，可以尝试申请账号。</li>
<li>自己的电脑安装双系统或虚拟机。</li>
<li>使用<a href="http://blog.csdn.net/woodcorpse/article/details/79313846">gitforwindows</a>在windows下模拟使用Linux命令。</li>
<li>购买一块云服务器</li>
<li>试验下在线学习平台实验楼 <a href="https://www.shiyanlou.com" class="uri">https://www.shiyanlou.com</a> (里面也有不少Linux教程，任意点一个进去，双击桌面的<code>Xfce</code>图标，都可以启动Linux终端)</li>
<li><a href="https://mp.weixin.qq.com/s/rXjQfyEX2FnuW9HTM_Uc8Q">这里有2个免费Linux系统等你来用</a></li>
</ul>
</div>
<div id="linux_login" class="section level3 hasAnchor" number="1.1.4">
<h3><span class="header-section-number">1.1.4</span> Linux系统登录-联系远方的她<a href="linux_basic.html#linux_login" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>登录服务器的IP是：192.168.1.107; 端口是：22；用户名是每个人的姓名全拼，如陈同为chentong (全小写，无空格)；密码是 yishengxin。</p>
<div class="figure" style="text-align: center"><span style="display:block;" id="fig:unnamed-chunk-2"></span>
<img src="image/Linux_xshell1.png" alt="配置Xshell登录服务器1。" width="100%" />
<p class="caption">
Figure 1.1: 配置Xshell登录服务器1。
</p>
</div>
<div class="figure" style="text-align: center"><span style="display:block;" id="fig:unnamed-chunk-3"></span>
<img src="image/Linux_xshell2.png" alt="配置Xshell登录服务器2。" width="100%" />
<p class="caption">
Figure 1.2: 配置Xshell登录服务器2。
</p>
</div>
</div>
<div id="linux_cmd" class="section level3 hasAnchor" number="1.1.5">
<h3><span class="header-section-number">1.1.5</span> 初识Linux系统 - 黑夜中的闪烁是你的落脚点<a href="linux_basic.html#linux_cmd" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>既然用Linux，我们就摒弃界面操作，体验其命令行的魅力和庞大。后续操作都是在命令行下进行的，主要靠键盘，少数靠鼠标。</p>
<p>登录Linux系统后，呈现在眼前的是这样一个界面:</p>
<p>首先解释下出现的这几个字母和符号:</p>
<ul>
<li><code>ct</code>: 用户名</li>
<li><code>ysx</code>：如果是登录的远程服务器，则为宿主机的名字；若是本地电脑，则为自己电脑的名字。</li>
<li><code>~</code>: 代表家目录, 在我们进入新的目录后，这个地方会跟着改变</li>
<li><code>$</code>: 用来指示普通用户输入命令的地方；对根用户来说一般是<code>#</code></li>
<li><a href="http://bashrcgenerator.com/" class="uri">http://bashrcgenerator.com/</a>可视化定制不同的显示方式。</li>
<li>个人习惯的展示：<code>PS1=\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$</code></li>
<li>闪烁的光标处是你敲打键盘体验威力的地方 - 输入命令并按回车。</li>
</ul>
</div>
<div id="my_computer" class="section level3 hasAnchor" number="1.1.6">
<h3><span class="header-section-number">1.1.6</span> 我的电脑在哪？<a href="linux_basic.html#my_computer" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>打开Windows，首先看到的是桌面；不爱整理文件的我，桌面的东西已经多到需要2个屏幕才能显示的完。另外一个常用的就是我的电脑，然后打开D盘，依次点开对应的文件夹，然后点开文件。</p>
<p>Linux的文件系统组织方式与Windows略有不同，登录进去就是家目录，可视为Windows下的桌面[^Linux的家目录严格来说可能类似于Windows下的`C:\\Users\\ct`]。在这个目录下，我们可以新建文件、新建文件夹，就像在桌面上的操作一样。</p>
<p>而Linux的完整目录结构如下：</p>
<div class="figure" style="text-align: center"><span style="display:block;" id="fig:unnamed-chunk-5"></span>
<img src="image/Linux_dir.png" alt="Linux目录层级结构。" width="100%" />
<p class="caption">
Figure 1.3: Linux目录层级结构。
</p>
</div>
<table>
<caption><span id="tab:unnamed-chunk-7">Table 1.1: </span>Linux下目录简介</caption>
<colgroup>
<col width="27%" />
<col width="72%" />
</colgroup>
<thead>
<tr class="header">
<th align="left">Path</th>
<th align="left">Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">/</td>
<td align="left">根目录</td>
</tr>
<tr class="even">
<td align="left">/bin</td>
<td align="left">常用软件如ls, mkdir, top等的存放地</td>
</tr>
<tr class="odd">
<td align="left">/dev</td>
<td align="left">硬件相关</td>
</tr>
<tr class="even">
<td align="left">/etc</td>
<td align="left">存放系统管理和配置相关文件</td>
</tr>
<tr class="odd">
<td align="left">/etc/cron*</td>
<td align="left">与定时任务相关的文件夹，可执行程序放置到对应文件夹就可以定时执行</td>
</tr>
<tr class="even">
<td align="left">/etc/profile.d</td>
<td align="left">目录下存放Bash相关的配置文件，相当于全局的.bashrc</td>
</tr>
<tr class="odd">
<td align="left">/etc/profile.d/custom.sh</td>
<td align="left">我在配置全局环境时，一般写入这个文件；如果不存在，可以新建。</td>
</tr>
<tr class="even">
<td align="left">/home</td>
<td align="left">家目录，默认新建用户的个人家目录都在此文件夹下</td>
</tr>
<tr class="odd">
<td align="left">/home/ct</td>
<td align="left">用户名为ct的用户的家目录</td>
</tr>
<tr class="even">
<td align="left">/lib -&gt; usr/lib</td>
<td align="left">存放动态库的目录 (library)，安装软件时碰到依赖的动态库一般存储于此</td>
</tr>
<tr class="odd">
<td align="left">/lib64 -&gt; usr/lib64</td>
<td align="left">64位软件动态库，-&gt; 表示软连接，等同于快捷方式</td>
</tr>
<tr class="even">
<td align="left">/mnt</td>
<td align="left">文件系统挂载，一般插入U盘会显示在这。</td>
</tr>
<tr class="odd">
<td align="left">/opt</td>
<td align="left">部分额外安装的软件会置于此</td>
</tr>
<tr class="even">
<td align="left">/root</td>
<td align="left">根用户的家目录</td>
</tr>
<tr class="odd">
<td align="left">/sbin -&gt; usr/sbin</td>
<td align="left">根用户的管理命令</td>
</tr>
<tr class="even">
<td align="left">/tmp</td>
<td align="left">临时目录，会定时清空，常用于存放中间文件</td>
</tr>
<tr class="odd">
<td align="left">/usr</td>
<td align="left">存放系统应用的目录，前面有几个目录都是该目录下子目录的软链</td>
</tr>
<tr class="even">
<td align="left">/usr/bin</td>
<td align="left">大部分应用程序安装于此</td>
</tr>
<tr class="odd">
<td align="left">/usr/sbin</td>
<td align="left">根用户的管理命令</td>
</tr>
<tr class="even">
<td align="left">/usr/lib</td>
<td align="left">存放动态库的目录 (library)，安装软件时碰到依赖的动态库一般存储于此</td>
</tr>
<tr class="odd">
<td align="left">/usr/lib64</td>
<td align="left">64位软件动态库</td>
</tr>
<tr class="even">
<td align="left">/usr/local/bin</td>
<td align="left">存放本地安装的命令</td>
</tr>
<tr class="odd">
<td align="left">/usr/local/lib</td>
<td align="left">存放本地安装的库</td>
</tr>
<tr class="even">
<td align="left">/var</td>
<td align="left">存放各服务的日志文件。若装有网络服务，一般在/var/www/html下。</td>
</tr>
</tbody>
</table>
<p>作为一个普通用户，通常只在<code>/home/usr</code>, <code>/tmp</code>下有<strong>可写</strong>的权限，其它目录最多是<strong>可读、可执行</strong>，部分目录连读的权限都没有。这种权限管理方式是Linux能成为真正多用户系统的一个原因。后面我们会讲解如何查看并修改这些权限。</p>
</div>
<div id="linux_system_hardware" class="section level3 hasAnchor" number="1.1.7">
<h3><span class="header-section-number">1.1.7</span> 系统配置怎样？来看看256M硬盘的服务器<a href="linux_basic.html#linux_system_hardware" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>看完目录结构了，来看一下硬盘有多大，有多少可用空间，只需要运行<code>df -h</code>命令。</p>
<p>除了看硬盘，还想看下CPU、内存、操作系统呢？</p>
<pre><code>Hostname is localhost.localdomain,Ip address is 192.168.1.30.

The 64 bit operating system is  CentOS release 6.9 (Final), 
    
Nuclear info is 2.6.32-696.10.1.el6.x86_64.

The CPU is Intel(R) Xeon(R) CPU E9-5799 v2 @ 3.90GHz.

There are 8 physical cpu, each physical cpu has 0 cores, 0 threads.

There are 96 logical cpu.

The memory of this server is 252G.</code></pre>
</div>
<div id="directpry_show" class="section level3 hasAnchor" number="1.1.8">
<h3><span class="header-section-number">1.1.8</span> 看下目录下都有什么<a href="linux_basic.html#directpry_show" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>通常登陆后直接进入家目录，下面大部分操作也是在家目录下完成的。如果想查看当前目录下都有什么内容，输入命令 <code>ls</code>，回车即可 (ls可以理解为单词list的缩写)。当前目录下什么也没有，所以没有任何输出。</p>
<p>如果错把<code>l</code>看成了<code>i</code>，输入了<code>is</code>，则会出现下面的提示<code>未找到命令</code>。如果输入的是Linux基本命令，出现这个提示，基本可以判定是命令输入错了，瞪大眼睛仔细看就是了。 <strong>在敲完命令回车后，注意查看终端的输出，以判断是否有问题。</strong></p>
<p>当前目录下只有一个文件，看不出效果，我们可以新建几个文件和文件夹。</p>
</div>
<div id="mkdir" class="section level3 hasAnchor" number="1.1.9">
<h3><span class="header-section-number">1.1.9</span> 新建一个目录<a href="linux_basic.html#mkdir" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p><code>mkdir</code>是新建一个目录 (<code>m</code>a<code>k</code>e a <code>dir</code>ectory)；<code>data</code>是目录的名字。
如果目录存在，则会出现提示，“无法创建已存在的目录”。这时可以使用参数<code>-p</code>忽略这个错误。</p>
<p><code>cat</code>是一个命令，主要用来查看文件；在这与<code>&lt;&lt;END</code>连用用于读入大段数据。输入<code>cat &lt;&lt;END</code>之后，回车，会看到终端出现一个大于号，大于号后面可以输入内容，再回车，继续输入内容，直到我们输入<code>END</code> (大写的，与上面一致)，输入过程结束，我们输入的内容都显示在了屏幕上。</p>
<p>如果我们想把这些内容写入文件，就需要使用 <code>command &gt; filename</code>格式。</p>
<p><code>&gt;</code>是一个重定向符号，即把前面命令的输出写入到<code>&gt;</code>后面的文件中。如下所示，新建了一个<code>Fasta</code>格式的文件。</p>
<p><code>ls -l</code>列出文件的详细信息；<code>-l</code>表示命令行参数，是程序预留的一些选项，保证在不更改程序的情况下获得更灵活的操作。可使用<code>man ls</code>查看<code>ls</code>所有的命令行参数, <strong>上下箭头翻页</strong>，按<code>q</code>退出查看。(man: manual, 手册)</p>
</div>
<div id="cat_file" class="section level3 hasAnchor" number="1.1.10">
<h3><span class="header-section-number">1.1.10</span> 访问文件<a href="linux_basic.html#cat_file" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>查看写入的文件的内容，<code>cat 文件名</code>；需要注意的是文件所在的目录，默认是当前目录；如下面第一个命令，会提示<code>cat: test.fa: 没有那个文件或目录</code>，是因为当前目录下不存在文件<code>test.fa</code>。(注意文件末尾的end)</p>
<p><code>test.fa</code>在目录<code>data</code>下，可以先进入<code>data</code>目录，然后再查看文件。类比于Windows下先点开一个文件夹，再点开下面的文件。</p>
<p>这个例子中文件<code>test.fa</code>在当前目录的子目录<code>data</code>里面，在当前目录下直接查看<code>test.fa</code>就像在<code>我的电脑</code>里面不进入C盘，就像打开<code>Program file</code>文件夹。这属于<strong>隔空打牛</strong>的境界，不是一般人能练就的。起码Linux下不可以。</p>
<p>提到目录，Linux下有<strong>绝对路径</strong>和<strong>相对路径</strong>的概念。</p>
<ul>
<li><p>绝对路径：以<code>/</code>开头的路径为绝对路径，如<code>/home/ct</code>, <code>/usr/bin</code>, <code>/home/ct/data</code>等。需要注意的是<code>~/data</code>等同于<code>/home/ct/data</code>, 多数情况下可以等同于绝对路径，但在一个情况下例外，软件安装时用于<code>--prefix</code>后的路径必须是<code>/</code>开头的绝对路径。</p></li>
<li><p>相对路径: 不以<code>/</code>和<code>~</code>开头的路径都是相对路径，如<code>data</code>表示当前目录下的data目录，等同于<code>./data</code> (<code>.</code>为当前目录), <code>../data</code>表示当前目录的上一层目录下的data目录 (<code>../</code>表示上层目录)。</p></li>
</ul>
<p><code>pwd</code> (print working directory) 获取当前工作目录。</p>
<p><code>cd</code> (change dir)切换目录。若<code>cd</code>后没有指定切换到那个目录，则调回家目录。特别地，<code>cd -</code>表示返回到最近的<code>cd</code>操作前所在目录，相当于回撤到上一个工作目录。</p>
<p><code>head</code>查看文件最开始的几行，默认为10行，可使用<code>-n 6</code>指定查看前6行。</p>
<p>另外<code>less</code>和<code>more</code>也可以用来查看文件，尤其是文件内容特别多的时候。</p>
</div>
<div id="com_parameter_help" class="section level3 hasAnchor" number="1.1.11">
<h3><span class="header-section-number">1.1.11</span> 查看帮助，获取可用命令行参数<a href="linux_basic.html#com_parameter_help" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>前面使用的命令，有几个用到了参数如<code>ls -l</code>, <code>head -n 6</code>等，需要注意的是命令跟参数之间要有<strong>空格</strong>。</p>
<p>终端运行<code>man ls</code>可以查看<code>ls</code>所有可用的参数，上下箭头翻页，按<code>q</code>退出查看。(man: manual, 手册)</p>
</div>
<div id="first_summary" class="section level3 hasAnchor" number="1.1.12">
<h3><span class="header-section-number">1.1.12</span> 小结<a href="linux_basic.html#first_summary" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<ol style="list-style-type: decimal">
<li><p>Linux是多用户操作系统。这一点可以从我们每个人能同时登录到同一台Linux电脑各自进行操作而不相互干扰可以体会出来。大家可以尝试下是否可以看到其它人家目录下的东西。我们后期在<strong>权限管理</strong>部分会涉及如何开放或限制自己的文件被他人访问。</p></li>
<li><p>Linux下所有目录都在<strong>根目录</strong>下。根目录某种程度上可类比于Windows的我的电脑，第一级子目录类比于<code>C盘</code>，<code>D盘</code>等 (等我们熟练了，就忘记这个拙劣的类比吧)。</p></li>
<li><p>使用<code>mkdir</code>新建目录，<code>cd</code>切换目录，<code>pwd</code>获取当前工作目录，<code>ls</code>查看目录下的内容, <code>cat</code>查看文件，<code>man ls</code>查看ls命令的使用。</p></li>
<li><p>访问一个文件需要指定这个文件的路径，当前目录下的文件可省略其路径<code>./</code>，其它目录下则需要指定全路径 (可以是相对路径，也可以是绝对路径)。</p></li>
</ol>
</div>
<div id="first_exercise" class="section level3 hasAnchor" number="1.1.13">
<h3><span class="header-section-number">1.1.13</span> 做个小测试<a href="linux_basic.html#first_exercise" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<ol style="list-style-type: decimal">
<li>在家目录下新建文件夹<code>bin</code>和<code>soft</code>。</li>
<li>在<code>bin</code>和<code>soft</code>目录下各自新建一个文件，名字都是<code>README</code>。</li>
<li>在<code>bin/README</code>文件中写入内容：This folder is used to save executable files。</li>
<li>在<code>soft/README</code>文件中写入内容：This folder is used to save software source files。</li>
<li>查看两个<code>README</code>文件的大小。</li>
</ol>
</div>
</div>
<div id="fileoperation" class="section level2 hasAnchor" number="1.2">
<h2><span class="header-section-number">1.2</span> Linux下文件操作<a href="linux_basic.html#fileoperation" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<div id="tac_rev" class="section level3 hasAnchor" number="1.2.1">
<h3><span class="header-section-number">1.2.1</span> 文件按行翻转和按列翻转<a href="linux_basic.html#tac_rev" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>两个有意思的命令，<code>tac</code>: 文件翻转，第一行变为最后一行，第二行变为倒数第二行；<code>rev</code>每列反转，第一个字符变为最后一个字符，第二个字符变为倒数第二个字符。</p>
</div>
<div id="new_file" class="section level3 hasAnchor" number="1.2.2">
<h3><span class="header-section-number">1.2.2</span> 新建文件的n种方式<a href="linux_basic.html#new_file" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p><code>nano</code>类似于Windows下记事本的功能，<code>nano filename</code>就可以新建一个文件，并在里面写内容；<code>ctrl+x</code>退出，根据提示按<code>Y</code>保存。</p>
<p><code>vim</code> 功能更强大的文本编辑器。<code>vim filename</code>就可以新建一个文件, 敲击键盘字母<code>i</code>，进入写作模式。写完后，敲击键盘<code>Esc</code>, 退出写作模式，然后输入<code>:w</code> (会显示在屏幕左下角)，回车保存。<code>vim</code>的常用方法，后面会有单独介绍。</p>
</div>
<div id="file_cp_mv_rename_link" class="section level3 hasAnchor" number="1.2.3">
<h3><span class="header-section-number">1.2.3</span> 文件拷贝、移动、重命名、软链<a href="linux_basic.html#file_cp_mv_rename_link" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>常用的文件操作有移动文件到另一个文件夹、复制文件到另一个文件夹、文件重命名等。</p>
<p><code>cp</code> (copy): 拷贝文件或文件夹 (<code>cp -r</code> 拷贝文件夹时的参数，递归拷贝).</p>
<p><code>cp source1 source2 ... target_dir</code> 将一个或多个源文件或者目录复制到已经存在的目标目录。</p>
<p><code>cp</code>常用参数</p>
<blockquote>
<p>-r: 递归拷贝</p>
</blockquote>
<blockquote>
<p>-f: 强制覆盖</p>
</blockquote>
<blockquote>
<p>-i: 覆盖前先询问</p>
</blockquote>
<blockquote>
<p>-p: 保留文件或目录的属性，主要是时间戳</p>
</blockquote>
<blockquote>
<p>-b: 备份复制，若目标文件存在，先备份之前的，再把新的覆盖过去</p>
</blockquote>
<blockquote>
<p>-u: 更新复制，若源文件和目标文件都存在，只在源文件的修改时间比较新时才复制</p>
</blockquote>
<p><code>mv</code> (move): 移动文件或文件夹</p>
<p><code>mv source target</code>, 常用参数有</p>
<blockquote>
<p>-f: 强制覆盖</p>
</blockquote>
<blockquote>
<p>-i: 覆盖前询问</p>
</blockquote>
<blockquote>
<p>-u: 更新移动</p>
</blockquote>
<p><code>rename</code>: 文件重命名 (常用于批量重命名，不同的系统可能用法略有不同，使用前先<code>man rename</code>查看使用方法)</p>
<p><code>ln</code> (link): 给文件建立快捷方式 (<code>ln -s source_file target</code> 创建软连接)。</p>
<p>在建立软连接时，原文件要使用全路径。全路径指以<code>/</code>开头的路径。如果希望软链可以让不同的用户访问，不要使用<code>~</code>。</p>
<p>建立软连接，是为了在不增加硬盘存储的情况下，简化文件访问方式的一个办法。把其它文件夹下的文件链接到当前目录，使用时只需要写文件的名字就可以了，不需要再写长串的目录了。</p>
<p><code>ln</code>命令常用参数</p>
<blockquote>
<p>-s: 软连接</p>
</blockquote>
<blockquote>
<p>-f: 强制创建</p>
</blockquote>
<p><code>../</code>: 表示上一层目录；<code>../../</code>: 表示上面两层目录</p>
<p><code>pwd</code> (print current/working directory): 输出当前所在的目录</p>
<p><code>\``为键盘</code>Esc<code>下第一个按键 (与家目录</code>~`符号同一个键)，写在反引号内的命令会被运行，运行结果会放置在反引号所在的位置</p>
<p>使用全路径名，尤其使用家目录 <code>~</code> 符号时，只限操作用户自身有效。另外不同用户之间建立软连接，需要考虑<strong>访问权限</strong>问题，任意一层目录都需要可读权限 (目录的可读为<code>rx</code>都有)。</p>
<p>复制、移动或创建软连接时，如果目标已存在，除了使用<code>-f</code>强制覆盖外，还可以使用<code>rm</code>命令删除。</p>
<p><code>rm</code>可以删除一个或多个文件和目录，也可以递归删除所有子目录，使用时一定要慎重。<code>rm</code>命令删除的文件很难恢复。</p>
<p><code>rm -rf *</code>: 可以删除当前目录下所有文件和文件夹，慎用。</p>
<p><code>rm</code>命令常见参数：</p>
<blockquote>
<p>-f：强制删除</p>
</blockquote>
<blockquote>
<p>-i: 删除前询问是否删除</p>
</blockquote>
<blockquote>
<p>-r: 递归删除</p>
</blockquote>
</div>
<div id="linux_abnormal" class="section level3 hasAnchor" number="1.2.4">
<h3><span class="header-section-number">1.2.4</span> Linux下命令的一些突发事故<a href="linux_basic.html#linux_abnormal" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p><strong>命令不全</strong>：在命令没有输入完 (引号或括号没有配对)，就不小心按下了<code>Enter</code>键，终端会提示出一个<code>&gt;</code>代表命令不完整，这是可以继续输入，也可以<code>ctrl+c</code>终止输入，重新再来。(下面sed命令使用时，还有另外一种命令不全的问题)</p>
<p><strong>文件名输入错误</strong>: 多一个字母、少一个字母、大小写问题</p>
<p><strong>所在目录不对</strong>: 访问的文件不存在于当前目录，而又没有提供绝对路径, 或软连接失效</p>
</div>
<div id="file_op_gzip_wc" class="section level3 hasAnchor" number="1.2.5">
<h3><span class="header-section-number">1.2.5</span> 了解和操作你的文件<a href="linux_basic.html#file_op_gzip_wc" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>常用的文件内容操作有文件压缩解压缩、文件大小行数统计、文件内容查询等。</p>
<p><code>gzip</code>: 压缩文件; <code>gunzip</code>: 解压缩文件</p>
<p><code>wc</code> (word count): 一般使用<code>wc -l</code>获取文件的行数。</p>
<p>获取文件中包含大于号 (<code>&gt;</code>)的行, <code>grep</code> (print lines matching a pattern，对每一行进行模式匹配)。</p>
<p><code>grep</code>的用法很多，支持正则表达式匹配，这个后面我们会详细讲解。</p>
<p>替换文件中的字符: <code>sed</code>是一个功能强大的文件内容编辑工具，常用于替换、取得行号等操作。现在先有个认识，后面会详细介绍。</p>
<p><code>|</code> 为管道符，在相邻命令之间传递数据流，表示把上一个命令的输出作为下一个命令的输入。</p>
<p>另外一个方式，去除<code>HAHA</code>，使用<code>cut</code>命令。cut更适合于矩阵操作，去除其中的一列或者多列。但在处理FASTA格式文件时有这么一个妙用。FASTA文件中序列里面是没有任何符号的，而如果名字比较长，则可以指定相应分隔符就行<code>cut</code>，这样既处理了名字，又保留了序列。</p>
<p><code>-f</code>: 指定取出哪一列，使用方法为<code>-f 2</code> (取出第2列)，<code>-f 2-5</code> (取出第2-5列)，<code>-f 2,5</code> (取出第2和第5列)。<strong>注意不同符号之间的区别。</strong></p>
<p><code>-d</code>: 设定分隔符, 默认为TAB键。如果某一行没有指定的分隔符，整行都为第一列。</p>
</div>
<div id="second_exercise" class="section level3 hasAnchor" number="1.2.6">
<h3><span class="header-section-number">1.2.6</span> 小结和练习<a href="linux_basic.html#second_exercise" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<ol style="list-style-type: decimal">
<li>Linux下文件拷贝、移动、重命名、软连接、压缩、替换等操作。</li>
<li>Linux下常见问题
<ul>
<li><code>ysx2.fa: 没有那个文件或目录</code>：这个错误通常由什么引起，应该怎么解决？</li>
<li>若文件<code>a</code>存在，运行<code>ln a data/b</code>能否成功给<code>a</code>建立软连接？</li>
<li><code>grep '&gt; ysx.fa</code>的输出是什么？</li>
</ul></li>
<li>若目标文件存在时，再运行<code>cp</code>, <code>mv</code>或<code>ln</code>会有什么提示？</li>
<li>计算某一个Fasta序列中序列的个数。</li>
</ol>
</div>
</div>
<div id="shortcut" class="section level2 hasAnchor" number="1.3">
<h2><span class="header-section-number">1.3</span> Linux终端常用快捷操作<a href="linux_basic.html#shortcut" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<ul>
<li><p>命令或文件名自动补全：在输入命令或文件名的前几个字母后，按<code>Tab</code>键，系统会自动补全或提示补全</p></li>
<li><p>上下箭头：使用上下箭头可以回溯之前的命令，增加命令的重用，减少输入工作量</p></li>
<li><p><code>!</code>加之前输入过的命令的前几个字母，快速获取前面的命令</p></li>
<li><p><code>ctrl+a</code>回到命令的行首，<code>ctrl+e</code>到命令行尾，(<code>home</code>和<code>end</code>也有类似功能)，用于修改命令或注释掉命令</p></li>
<li><p><code>!!</code> 表示上一条命令。</p></li>
<li><p>替换上一个命令中的字符，再运行一遍命令，用于需要对多个文件执行同样的命令，又不想写循环的情况</p></li>
</ul>
</div>
<div id="linuxSpecialSymbols" class="section level2 hasAnchor" number="1.4">
<h2><span class="header-section-number">1.4</span> Linux 命令中的特殊符号<a href="linux_basic.html#linuxSpecialSymbols" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<p>Linux命令中有一些常用符号，看到时不一定好查询它们的功能和含义，这里列举一些常见的符号和解释，欢迎大家补充完善。</p>
<p><code>|</code>: 管道符，在两个相邻命令之间传递数据；如<code>ls | head</code>把<code>ls</code>命令的输出传给<code>head</code>命令，只显示前10个文件/文件夹。</p>
<p><code>*</code>: 通配符，通常用于匹配任意字符串，如<code>ls *.fq.gz</code>匹配当前目录下所有后缀为<code>.fq.gz</code>的文件，前缀可以是任何字符。</p>
<p><code>~</code>: 波浪线，指代家目录。键盘左上角<code>ESC</code>下的按键，配合<code>Shift</code>输入。</p>
<p><code>.</code>: 通常指代当前目录，如<code>./run.sh</code>运行当前目录下的<code>run.sh</code>脚本；<code>multiqc -d . -o multiqc</code>对当前目录下的文件执行<code>multiqc</code>汇总。</p>
<p><code>&gt;</code>: 输出重定向。<code>ls &gt; filename</code>把<code>ls</code>的输出结果写入文件<code>filename</code>。具体见<a href="https://mp.weixin.qq.com/s/zL9Mw_2ig48gHrIjKM0CMw">Linux学习 - 管道、标准输入输出</a>。</p>
<p><code>&lt;</code>: 输入重定向。<code>paste &lt;(ls *_1.fq.gz) &lt;(ls *_2.fq.gz)</code>把两个<code>ls</code>命令的输出传递给<code>paste</code>作为其输入。具体见<a href="https://mp.weixin.qq.com/s/zL9Mw_2ig48gHrIjKM0CMw">Linux学习 - 管道、标准输入输出</a>。</p>
<p><code>^</code>: 用于正则表达式中表示以什么开头。<code>grep '^&gt;' test.fa</code>获得所有<code>&gt;</code>开头的行，也就是FASTA文件的名字行。<code>sed 's/^&gt;//g'</code>替换开头的<code>&gt;</code>为空，第一个和第二个<code>/</code>之间的为被替换的内容，第二个和第三个<code>/</code>之间的为要被替换成的内容。</p>
<p><em>注意</em>：<code>grep '&gt;' file</code>和<code>grep &gt; file</code>的区别。</p>
<p><code>`</code>: 反引号，键盘左上角<code>ESC</code>下的按键。<code>`ls`</code>表示运行<code>ls</code>命令并捕获其输出。</p>
<p><code>$(ls)</code>: 等同于<code>`ls`</code>表示运行<code>ls</code>命令并捕获其输出。与把命令括在反引号中基本相似，但更推荐使用。个人是习惯了反引号了，少打一个字符。新学习时可直接使用此种方式。</p>
<p><code>;</code>: 多条语句写在一行需要加分号分割。如 <code>for samp in `tail -n +2 sampleFile | cut -f 1`; do ${samp}_related_things; done</code> 用分号分割开3个语句。循环 <code>`tail -n +2 sampleFile | cut -f 1`</code>的输出并进行一系列样品相关的操作。</p>
<p><code>$</code>或<code>${}</code>: 用于获取变量的值。如上面的<code>${samp}</code>。加和不加<code>{}</code>的通常无区别，但在一些情况会导致变量名字识别出错。如<code>${samp}_related_things</code>表示获取变量<code>samp</code>的值，而<code>$samp_related_things</code>表示获取变量<code>samp_related_things</code>的值。</p>
<p><code>\t</code>: TAB键</p>
<p><code>\n</code>: 换行</p>
<p><code>\r</code> <code>^M</code>: 回车符; <code>^M</code>的输入方式是<code>Ctrl+v;Ctrl+m</code>; 通常<code>windows</code>下的文件拷贝到<code>linux</code>系统上，需要执行<code>sed -i s/\r//g file</code>去掉末尾的回车符。</p>
<p><code>awk</code>中的<code>$0, $1</code>: <code>$0</code>表示整行，<code>$1</code>表示当前行第一列，<code>$2</code>表示当前行第二列，以此类推。</p>
<p><code>''</code>与<code>""</code>： 单引号和双引号通常混用，但双引号中的变量可以获取其值。</p>
<p><code>&amp;</code>: 把程序放到后台运行，具体见<a href="https://mp.weixin.qq.com/s/kt_e-DCq7xBfh9tTCJinZQ">耗时很长的程序忘加nohup就运行了怎么办？</a>章节。</p>
<p><code>\\</code>: 通常是转义符，把特殊变量转义为普通字符，如<code>${HOME}</code>表示获取家目录，<code>\${HOME}</code>就是一个字符串<code>${HOME}</code>。<code>\\</code>用于行尾时表示该行命令还未结束，后面还有跟随的命令语句，常用于命令太长一行写不下时。</p>
<p><code>a="a value"</code>: 等号用于bash中变量赋值时，前后都不能有空格。</p>
<p><code>&lt;&lt;</code>: 表示读入数据，具体见<a href="https://mp.weixin.qq.com/s/zL9Mw_2ig48gHrIjKM0CMw">Linux学习 - 管道、标准输入输出</a>。</p>
</div>
<div id="stdinoutpipe" class="section level2 hasAnchor" number="1.5">
<h2><span class="header-section-number">1.5</span> Linux下的标准输入、输出、重定向、管道<a href="linux_basic.html#stdinoutpipe" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<p>在Linux系统中，有4个特殊的符号，<code>&lt;</code>, <code>&gt;</code>, <code>|</code>, <code>-</code>，在我们处理输入和输出时存在重要但具有迷惑性的作用。</p>
<p>默认Linux的命令的结果都是输出到标准输出，错误信息 (比如命令未找到或文件格式识别错误等) 输出到标准错误，而标准输出和标准错误默认都会显示到屏幕上。</p>
<p><code>&gt;</code>表示重定向标准输出，<code>&gt; filename</code>就是把标准输出存储到文件filename里面。标准错误还是会显示在屏幕上。</p>
<p><code>2 &gt;&amp;1</code> 表示把标准错误重定向到标准输出。Linux终端用<code>2</code>表示标准错误，<code>1</code>表示标准输出。</p>
<p><code>-</code> (短横线)：表示标准输入，一般用于1个程序需要多个输入的时候。</p>
<p><code>&lt;</code> 标准输入，后面可以跟可以产生输出的命令，一般用于1个程序需要多个输入的时候。相比<code>-</code>适用范围更广。</p>
<p><code>|</code>管道符，表示把前一个命令的输出作为后一个命令的输入，前面也有一些展示例子。用于数据在不同的命令之间传输，用途是减少硬盘存取损耗。</p>
<p>下面我们通过一个程序<code>stdout_error.sh</code>来解释上面的文字 (Bash脚本写作，后面会有专门介绍)，内容如下</p>
<p>运行这个脚本</p>
<p>下面看管道符和标准输入的使用。</p>
<p>管道符的更多应用</p>
</div>
<div id="filecontent" class="section level2 hasAnchor" number="1.6">
<h2><span class="header-section-number">1.6</span> Linux文件内容操作<a href="linux_basic.html#filecontent" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<div id="generate_file_seq" class="section level3 hasAnchor" number="1.6.1">
<h3><span class="header-section-number">1.6.1</span> 命令组合生成文件<a href="linux_basic.html#generate_file_seq" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p><code>seq</code>: 产生一系列的数字; <code>man seq</code>查看其具体使用。我们这使用<code>seq</code>产生下游分析所用到的输入文件。</p>
</div>
<div id="sort_par" class="section level3 hasAnchor" number="1.6.2">
<h3><span class="header-section-number">1.6.2</span> 文件排序原来有暗仓<a href="linux_basic.html#sort_par" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p><code>sort</code>: 排序，默认按字符编码排序。如果想按数字大小排序，需添加<code>-n</code>参数。</p>
<p><code>sort</code>常用参数</p>
<blockquote>
<p>-n: 数值排序</p>
</blockquote>
<blockquote>
<p>-h: 人类刻度的数值排序 (2K 1G等)</p>
</blockquote>
<blockquote>
<p>-r: reverse, 逆序</p>
</blockquote>
<blockquote>
<p>-c: check, 不排序，查看文件是否已排序好</p>
</blockquote>
<blockquote>
<p>-k: 指定使用哪列或哪几列排序</p>
</blockquote>
<blockquote>
<p>-m: 合并已经排序好的文件</p>
</blockquote>
<blockquote>
<p>-S: 缓冲区大小，用于排序大文件时的分割排序中每次分割的文件大小</p>
</blockquote>
<blockquote>
<p>-u: 重复行只保留一次</p>
</blockquote>
<p><code>sort -u</code>: 去除重复的行，等同于<code>sort | uniq</code>。</p>
<p><code>sort file | uniq -d</code>: 获得重复的行。(<code>d</code>=<code>duplication</code>)</p>
<p><code>sort file | uniq -c</code>: 获得每行重复的次数。</p>
<p>整理下<code>uniq -c</code>的结果，使得原始行在前，每行的计数在后。</p>
<p><code>awk</code>是一个强大的文本处理工具，其处理数据模式为按行处理。每次读入一行，进行操作。</p>
<ul>
<li><code>OFS</code>: 输出文件的列分隔符 (output file column separtor)；</li>
<li><code>FS</code>为输入文件的列分隔符 (默认为空白字符)；</li>
<li><code>awk</code>中的列从第1到n列，分别记录为<code>$1</code>, <code>$2</code> … <code>$n</code>；</li>
<li><code>BEGIN</code>表示在文件读取前先设置基本参数；与之相对应的是<code>END</code>，只文件读取完成之后进行操作；</li>
<li>不以<code>BEGIN</code>, <code>END</code>开头的<code>{}</code>就是文件读取、处理的部分。每次对一行进行处理。后面会详细讲解。</li>
</ul>
<p>对两列文件，按照第二列进行排序, <code>sort -k2,2n</code>。</p>
<p>两个暗仓：</p>
<ol style="list-style-type: decimal">
<li>sort默认文件列分隔符是所有空字符，若同时存在<tab>和<space>会有非预期结果。</li>
<li><code>sort -t '\t'</code>是错误用法，TAB键的正确输入方式是：先按&lt;ctrl+v&gt;再按<tab>。</li>
</ol>
</div>
<div id="实战fasta序列提取-fasta_extract" class="section level3 hasAnchor" number="1.6.3">
<h3><span class="header-section-number">1.6.3</span> 实战FASTA序列提取 [#fasta_extract}<a href="linux_basic.html#%E5%AE%9E%E6%88%98fasta%E5%BA%8F%E5%88%97%E6%8F%90%E5%8F%96-fasta_extract" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>生成单行序列FASTA文件，提取特定基因的序列，最简单的是使用<code>grep</code>命令。</p>
<p><code>grep</code>在前面也提到过，以后还会经常提到，主要用途是匹配文件中的字符串，以此为基础，进行一系列的操作。如果会使用正则表达式，将会非常强大。正则表达式版本很多，几乎每种语言都有自己的规则，后面会详细展开。</p>
<p>多行FASTA序列提取要麻烦些，一个办法就是转成单行序列，用上面的方式处理。</p>
<p><code>sed</code>和<code>tr</code>都为最常用的字符替换工具。</p>
<blockquote>
<p><code>&gt;</code>SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGAC &gt;POU5F1 CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT CGGAAGGTAGTCGTCAGTGCAGCGAGTCC &gt;NANOG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGT</p>
</blockquote>
<pre><code># &gt;号前面加换行符
ct@ysx:~$ cat test.fasta | tr &#39;\n&#39; &#39;\t&#39; | sed &#39;s/\t&gt;/\n&gt;/g&#39;</code></pre>
<blockquote>
<p><code>&gt;</code>SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGAC</p>
</blockquote>
<blockquote>
<p><code>&gt;</code>POU5F1 CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT CGGAAGGTAGTCGTCAGTGCAGCGAGTCC</p>
</blockquote>
<blockquote>
<p><code>&gt;</code>NANOG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGT</p>
</blockquote>
<pre><code># 先把第一个TAB键变为换行符，实现序列名字和序列的分离
# 再去掉序列中所有的TAB键
ct@ysx:~$ cat test.fasta | tr &#39;\n&#39; &#39;\t&#39; | sed &#39;s/\t&gt;/\n&gt;/g&#39; \
        | sed &#39;s/\t/\n/&#39; | sed &#39;s/\t//g&#39; &gt;test.oneline.fa</code></pre>
<blockquote>
<p><code>&gt;</code>SOX2</p>
</blockquote>
<blockquote>
<p>ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC</p>
</blockquote>
<blockquote>
<p><code>&gt;</code>POU5F1</p>
</blockquote>
<blockquote>
<p>CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGTCGGAAGGTAGTCGTCAGTGCAGCGAGTCC</p>
</blockquote>
<blockquote>
<p><code>&gt;</code>NANOG</p>
</blockquote>
<blockquote>
<p>ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGT</p>
</blockquote>
<p>或者简单点，直接用前面的<code>awk</code>略微做下修改。</p>
</div>
</div>
<div id="linux_search" class="section level2 hasAnchor" number="1.7">
<h2><span class="header-section-number">1.7</span> Linux下的查找命令 - 文件哪里跑<a href="linux_basic.html#linux_search" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<p>查找是我们每天都在做的事情，早上醒来找下手机，出门之前查下公交，坐下之后查下资料，分析数据查下模式。</p>
<p>查找文件，查找信息，查找错误是应用起来更为具体的一些工作，而Linux命令行为我们提供了很多快捷强大的查找方式。</p>
<div id="seach_cmmand" class="section level3 hasAnchor" number="1.7.1">
<h3><span class="header-section-number">1.7.1</span> 命令/可执行程序查找 - 定位脚本的位置<a href="linux_basic.html#seach_cmmand" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p><code>whereis program_name</code>: 会在系统默认安装目录(一般是有root权限时默认安装的软件)和<code>$PATH</code>, <code>$MANPATH</code>指定的目录中查找二进制文件、源码、文档中包含给定查询关键词的文件。(默认目录有 <code>/bin</code>, <code>/sbin</code>, <code>/usr/bin</code>, <code>/usr/lib</code>, <code>/usr/local/man</code>等类似路径)</p>
<p><code>which program_name</code>: 会给出所有在<a href="http://mp.weixin.qq.com/s/poFpNHQgHDr0qr2wqfVNdw">环境变量</a>中的程序的路径，一来方便知道运行的程序在哪，二来方便修改。比如<a href="https://mp.weixin.qq.com/s/_9LKs6t6rcjzokF_0gneSA">vim `which sp_pheatmap.sh`</a>就可以直接修改绘制热图的脚本，<code>cp \</code>which sp_pheatmap.sh` .`可以直接把源码拷贝到当前目录，省去了写全路径的麻烦。</p>
<p>如果运行<code>which bwa</code>，系统返回是 <code>/usr/bin/which: no bwa in (/home/usr/bin:/bin)</code>则说明bwa没有安装或安装后没有放置在环境变量中，不可以直接写名字调用。</p>
</div>
<div id="locate" class="section level3 hasAnchor" number="1.7.2">
<h3><span class="header-section-number">1.7.2</span> locate普通文件快速定位<a href="linux_basic.html#locate" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p><code>locate</code>是快速查找定位文件的好方法，但其依赖于<code>updatedb</code>建立的索引。而<code>updatedb</code>一般是每天运行一次，所以当天新建的文件是索引不到的。如果有根用户权限，可以手动运行<code>updatedb</code>做个更新，然后再<code>locate bwa</code>。(个人用户也可以构建自己的<code>updatedb</code>, 使用<code>locate</code>在局部环境中查找。)</p>
<pre><code>ct@ysx:~$ locate R.sys
/soft/R.sys</code></pre>
</div>
<div id="find" class="section level3 hasAnchor" number="1.7.3">
<h3><span class="header-section-number">1.7.3</span> find让文件无处可逃 find<a href="linux_basic.html#find" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p><code>find / -name bwa</code>可以搜索根目录下所有名字为bwa的文件</p>
<p>运行上面的命令时会输出很多<code>Permission denied</code>，是因为 作为普通用户，无权限访问一些目录，因此会有提示输出，可以使用<code>find / -name bwa 2&gt;/dev/null</code>重定向标准错误到空设备，报错信息就被扔掉了，还不影响正常输出。</p>
<pre><code>ct@ysx:~$ find / -name R 2&gt;/dev/null
/usr/bin/R
/usr/lib/rstudio-server/R
/usr/share/groff/1.22.2/font/devascii/R
/usr/share/groff/1.22.2/font/devhtml/R
/usr/share/groff/1.22.2/font/devlatin1/R
/usr/share/groff/1.22.2/font/devutf8/R
/usr/local/bin/R
/usr/local/lib64/R
/usr/local/lib64/R/share/R
/usr/local/lib64/R/bin/R</code></pre>
<div id="find_by_time" class="section level4 hasAnchor" number="1.7.3.1">
<h4><span class="header-section-number">1.7.3.1</span> 按时间查找<a href="linux_basic.html#find_by_time" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>我们开发的在线画图网站 (<a href="http://mp.weixin.qq.com/s/pTHHqxuf0y1MCCCBaZjt9A">www.ysx.com/ImageGP</a>)，为了追踪每天用户使用时碰到了什么问题，需要每天定时去查看日志。</p>
<p>这个命令<code>find . -name *.log -mmin  -60</code>可以查看当前目录下(包括所有子目录)一小时内修改的日志文件。再配合<code>head</code>就可以查看每个日志文件的内容，以方便查看使用过程中出现了哪些错误，如何增加提示或修改画图程序。</p>
<p>正是有了这个利器，前台的错误提示中才出现了这么一句话，<strong>如果您核对后数据和参数没问题，请过1天再进行尝试。若是程序问题，我们通常会在1天内修复。</strong></p>
<p>当然后台数据都是用时间戳存储的，而且若无报错，数据会直接删掉，有报错的才会保留日志，不会泄露用户信息，这点大家不用担心。</p>
<p>现在画图网站越来越稳定，出现的问题越来越少，前台提示也越来越完善，希望大家使用时多看下提示，查看日志的频率也少了，就使用<code>find . -name *.log -mtime -1</code>查看从现在起24小时内的日志了。</p>
<p>这个也有个问题，每次查看的时间可能不一致，会漏查或有重叠，于是在某次查看完日志后，使用<code>touch check</code>在当前目录下新建了个空文件。以后再查日志文件时，只要使用<code>find . -name *.log -newer check</code>就可以获得所有上次查看过之后的新日志。每次查看完之后，都做个书签，就方便多了。</p>
<p>慢慢发现有空日志文件, 使用<code>find . -name *.log -newer check -size +0</code>过滤掉, 只保留大小大于0的文件。就这样在小伙伴聪明勤奋地维持下，我们绘图网站为<strong>7万</strong>多用户提供了近<strong>100万</strong>次服务 (<a href="https://mp.weixin.qq.com/s/ekTLcXSJh14Bm3PtVc9Mpg">画图手册 | ImageGP：今天你“plot”了吗？</a>)。</p>
</div>
<div id="按类型和大小查找-find_by_type_size" class="section level4 hasAnchor" number="1.7.3.2">
<h4><span class="header-section-number">1.7.3.2</span> 按类型和大小查找 {$find_by_type_size}<a href="linux_basic.html#%E6%8C%89%E7%B1%BB%E5%9E%8B%E5%92%8C%E5%A4%A7%E5%B0%8F%E6%9F%A5%E6%89%BE-find_by_type_size" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>如果我想得到当前目录下所有<code>png</code>和<code>jpg</code>照片呢？</p>
<p>使用 <code>find . \( -name "*.png" -o -name "*.jpg" \) | less</code></p>
<p>或 <code>find . -regex ".*\(\.png\|\.jpg\)$"</code></p>
<p><code>find . -type f -size +100G</code>可以获取大小超过100G的文件。</p>
</div>
<div id="find_maxdepth" class="section level4 hasAnchor" number="1.7.3.3">
<h4><span class="header-section-number">1.7.3.3</span> 限制查找深度<a href="linux_basic.html#find_maxdepth" class="anchor-section" aria-label="Anchor link to header"></a></h4>
<p>只看当前目录2层子目录内的文件<code>find . -maxdepth 2 -name *.log</code>。</p>
<p>查看不是<code>log</code>结尾的文件<code>find . -not -name *.log</code>。还有更多组合操作，详见find文档。</p>
</div>
</div>
<div id="grep_file" class="section level3 hasAnchor" number="1.7.4">
<h3><span class="header-section-number">1.7.4</span> 按文件内容查找 grep<a href="linux_basic.html#grep_file" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>find可以查找包含某句话的文件吗？ 还是拿我们的日志说事吧，<code>find . -name *.log -exec grep -l 'Error' {} \;</code>就可以返回所有包含<code>Error</code>单词的文件名。</p>
<p><code>find . -name *.log | xargs grep -l 'Error'</code>也可以。</p>
<p><code>grep -rl 'Error' *</code>也可以，不加<code>-l</code>还可以顺便返回匹配的行。</p>
<p><strong>匹配行的前后行</strong></p>
<p><code>grep -A 5 -B 1 'Bioinfo' ysx.log</code>可以查看匹配行的前1行(B, before)和后5行(A, after)。</p>
<p><strong>匹配次数</strong></p>
<p><code>grep -c 'Bioinfo' ysx.log</code>可以统计包含Bioinfo的行数</p>
<p><code>grep -ci 'Bioinfo' ysx.log</code>则会在匹配时忽略大小写。</p>
<p>统计FASTA序列中的序列数 <code>grep '^&gt;' ysx.fa</code></p>
<p>统计FASTQ序列中的序列数 <code>grep '^+$' ysx.fq</code>。(^表示以什么开头，$表示以什么结尾)。</p>
<p><strong>获取未匹配行</strong></p>
<p><code>grep -v 'Bioinfo' ysx.log</code>，读读手册(<code>man grep</code>)，可以看到更多参数使用。</p>
<p><strong>序列提取</strong></p>
<p>假设有个基因列表文件 (ID)，有个单行序列的FASTA文件 (ysx.fa)， 运行如下命令<code>grep -A 1 -Fw -f id ysx.fa | grep -v -- '--'</code>就可以批量提取序列了。</p>
<p><code>-f id</code>表示把id文件中的每一行作为一个匹配模式。<code>-F</code>表示匹配模式作为原始字符串，而非正则表达式，这是以防有特殊字符被解析。<code>-w</code>则表示作为一个单词匹配，即假如id中有<code>Sox2</code>，那么它会匹配<code>Sox2</code>，也会匹配<code>Sox21</code>；如果加了<code>-w</code>，则不会匹配<code>Sox21</code>。</p>
<p>更好的序列批量提取见 <a href="http://mp.weixin.qq.com/s/R1OHRhZoDJuAdyVdJr2xHg">awk的使用</a>。</p>
<p><strong>模式匹配</strong></p>
<p>grep强大的功能是支持正则匹配，默认使用基本正则表达式，<code>-E</code>使用扩展的正则表达式，<code>-P</code>使用perl格式的正则表达式。</p>
<p>比如想去掉文件中所有的空行<code>grep -v '^$' ysx.fa &gt;ysx.clean.fa</code>;</p>
<p>从公众号文章中搜索跟文章写作相关的文章 <code>grep 'writ.*' *.md</code> (可以匹配write, writing等字)；</p>
<p>正则表达式就比较多了，具体可以看<a href="http://mp.weixin.qq.com/s/4lUiZ60-aXLilRk9--iQhA" class="uri">http://mp.weixin.qq.com/s/4lUiZ60-aXLilRk9--iQhA</a>。</p>
</div>
</div>
<div id="grep_faster" class="section level2 hasAnchor" number="1.8">
<h2><span class="header-section-number">1.8</span> 一句话加速grep近30倍<a href="linux_basic.html#grep_faster" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<p>最近做一个项目，需要从表达矩阵中提取单个特定基因的表达值。最开始时文件比较小，使用<code>awk</code>单个读取处理也很快，但后来数据多了，从一个<code>1.2 G</code>的文件中提取单个基因的表达需要<code>30 s</code>，用<code>grep</code>来写需要<code>25 S</code>，这在平时写程序是可以接受的，但在网站上是接受不了的。所以就想着如何优化一下。</p>
<p>探索下来优化也很简单，把<code>grep</code>换为<code>LC_ALL=C grep</code>再加其它参数速度就快了近<strong>30</strong>倍，把时间控制在<code>1 s</code>左右。</p>
<p>下面是整个探索过程 （写这篇总结文章是在早晨，服务器不繁忙，所以下面的示例中只能看出来快了<code>5</code>倍左右。这也表明不加<code>LC_All=C</code>时<code>grep</code>受服务器负载影响较大，加了之后则几乎不受影响。）</p>
<div id="grep_single_gene" class="section level3 hasAnchor" number="1.8.1">
<h3><span class="header-section-number">1.8.1</span> 获取单基因表达量<a href="linux_basic.html#grep_single_gene" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>查看下文件大小</p>
<pre><code>ls -sh 334d41a7-e34a-4bab-841c-eb07bd84513f.txt

# 1.2G 334d41a7-e34a-4bab-841c-eb07bd84513f.txt</code></pre>
<p>查看下文件内容</p>
<pre><code>head 334d41a7-e34a-4bab-841c-eb07bd84513f.txt | cut -f 1,2

# Rnu2-1    -0.52
# Tmsb4Xp6  11.81
# S100A14   1.99
# Krt17 1.26
# Aldh1A1   6.92
# Fxyd3 0.56
# Rnu2-2P   0.35
# Rarres1   6.03
# Rnvu1-7   9.53
# Lcn2  3.44</code></pre>
<p>假设基因名字大小写一致时使用<code>awk</code>提取其表达信息，用时<code>14 s</code>。</p>
<pre><code>time awk &#39;{if($1==&quot;Tmsb4Xp6&quot;) print $2;}&#39; 334d41a7-e34a-4bab-841c-eb07bd84513f.txt &gt;1

real    0m14.569s
user    0m12.943s
sys 0m0.626s</code></pre>
<p>实际上大小写可能不一致而需要转换，耗时<code>17 s</code>。</p>
<pre><code>time awk &#39;{if(tolower($1)==&quot;tmsb4xp6&quot;) print $2;}&#39; 334d41a7-e34a-4bab-841c-eb07bd84513f.txt &gt;2

real    0m17.638s
user    0m17.031s
sys 0m0.595s</code></pre>
<p>采用<code>grep</code>命令提取 (<code>-i</code>忽略大小写)，用时<code>5 s</code>。</p>
<pre><code>time cat 334d41a7-e34a-4bab-841c-eb07bd84513f.txt | grep -i &#39;Tmsb4Xp6&#39; &gt;4

real    0m5.454s
user    0m5.134s
sys 0m1.272s</code></pre>
<p>上面的<code>grep</code>是全句匹配，想着加上<code>^</code>匹配行首是否会减少匹配量，速度能快一些，效果不明显，用时<code>4 s</code>。</p>
<pre><code>time cat 334d41a7-e34a-4bab-841c-eb07bd84513f.txt | grep -iP &#39;^Tmsb4Xp6&#39; &gt;5

real    0m4.262s
user    0m3.984s
sys 0m1.233s</code></pre>
<p><code>grep</code>是处理匹配关系，获得的是包含关键词但不一定全等于关键词，加一个<code>-w</code>参数，匹配更精确些，耗时<code>6.7 s</code>。</p>
<pre><code>time cat 334d41a7-e34a-4bab-841c-eb07bd84513f.txt | grep -iPw &#39;^Tmsb4Xp6&#39; &gt;6

real    0m6.723s
user    0m6.390s
sys 0m1.348s</code></pre>
<p>从上面来看，采用正则限定并不能提速，还是采用固定字符串方式提取，速度也差不多，耗时<code>5 s</code>。(<code>fgrep</code>等同于<code>grep -F</code>)</p>
<pre><code>time cat 334d41a7-e34a-4bab-841c-eb07bd84513f.txt | fgrep -i &#39;Tmsb4Xp6&#39; &gt;7

real    0m5.496s
user    0m5.128s
sys 0m1.366s</code></pre>
<p>主角出场，加上<code>LC_ALL=C</code>后，速度明显提升了，只需要<code>1 s</code>时间。</p>
<pre><code>time LC_ALL=C fgrep -i &#39;^Tmsb4Xp6&#39; 334d41a7-e34a-4bab-841c-eb07bd84513f.txt &gt;8

real    0m1.027s
user    0m0.671s
sys 0m0.355s</code></pre>
<p>多次测试下来，发现添加<code>LC_ALL=C</code>后<code>grep</code>命令快了很多，而且多次测试速度都很稳定 (不论服务器是繁忙还是空闲)。这里面的原理是涉及字符搜索空间的问题，我们操作的文件只包含字母、字符、数字，没有中文或其它复杂符号时都是适用的，具体原理和更多评估可查看文末的两篇参考链接，了解更多信息。</p>
<p>为了简化应用，我们可以<code>alias grep='LC_ALL=C grep'</code> (把这句话放到<code>~/.bashrc</code>或<code>~/.bahs_profile</code>里面)，后续再使用<code>grep</code>时就可以直接得到速度提升了。</p>
<pre><code>time grep -F -i &#39;^Tmsb4Xp6&#39; 334d41a7-e34a-4bab-841c-eb07bd84513f.txt 

real    0m1.013s
user    0m0.679s
sys 0m0.334s</code></pre>
</div>
<div id="grep_multiple_gene" class="section level3 hasAnchor" number="1.8.2">
<h3><span class="header-section-number">1.8.2</span> 那如果获取多个基因怎么操作呢？<a href="linux_basic.html#grep_multiple_gene" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>一个方式是使用正则表达式，多个基因一起传递过去，分别匹配，耗时<code>4.6 s</code>。</p>
<pre><code>time cat 334d41a7-e34a-4bab-841c-eb07bd84513f.txt | LC_ALL=C grep -iP &#39;Tmsb4Xp6|Sox1|Sox2|Sox3&#39;

real    0m4.654s
user    0m4.366s
sys 0m1.227s</code></pre>
<p>或者还是使用固定字符串查找模式，把所有基因每行一个写入文件<code>a</code>，然后再去匹配，耗时<code>2.5 s</code>，且测试发现在基因数目少于<code>10</code>时（这是通常的应用场景），基因多少影响不大 (这也说明能用固定字符串查找时最好显示指定)。</p>
<pre><code>time cat 334d41a7-e34a-4bab-841c-eb07bd84513f.txt | LC_ALL=C fgrep -i -f a &gt;11

real    0m2.539s
user    0m2.191s
sys 0m1.249s</code></pre>
<p>这里还比较了另外2个号称比<code>grep</code>快的命令<code>ag</code>和<code>rg</code>在这个应用场景没体现出性能优势。</p>
<pre><code>time cat 334d41a7-e34a-4bab-841c-eb07bd84513f.txt | LC_ALL=C ag -i &#39;^Tmsb4Xp6|Sox1|Sox2|Sox3&#39; &gt;10

real    0m11.281s
user    0m9.713s
sys 0m5.326s

time cat 334d41a7-e34a-4bab-841c-eb07bd84513f.txt | rg -iF -f a &gt;12

real    0m4.337s
user    0m3.444s
sys 0m2.787s</code></pre>
<ul>
<li><a href="https://www.inmotionhosting.com/support/website/speed-up-grep-searches-with-lc-all/" class="uri">https://www.inmotionhosting.com/support/website/speed-up-grep-searches-with-lc-all/</a></li>
<li><a href="https://stackoverflow.com/questions/42239179/fastest-way-to-find-lines-of-a-file-from-another-larger-file-in-bash#" class="uri">https://stackoverflow.com/questions/42239179/fastest-way-to-find-lines-of-a-file-from-another-larger-file-in-bash#</a></li>
</ul>
</div>
</div>
<div id="linux下的批量操作" class="section level2 hasAnchor" number="1.9">
<h2><span class="header-section-number">1.9</span> Linux下的批量操作<a href="linux_basic.html#linux%E4%B8%8B%E7%9A%84%E6%89%B9%E9%87%8F%E6%93%8D%E4%BD%9C" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<p>通常情况下我们的处理是针对多个样品的，比如多样品质控、多样品比对、多样品定量等。这时就需要用到循环来简化、优化计算了。</p>
<p>假如我们有一个命令如下（这是群里的提问，这条命令是把质量值编码 Phred64 转为 Phred 33）</p>
<pre><code># 输入文件 sample1.fq
# 输出文件 sample1_33.fq
vsearch --fastq_convert sample1.fq --fastq_ascii 64 --fastq_asciiout 33 --fastqout sample1_33.fq </code></pre>
<p>这条命令可以处理单个文件，假如有 3 个文件呢？这难不倒勤奋的小能手。</p>
<p>把命令写 3 遍，改6 次样本名。</p>
<pre><code># 输入文件 sample1.fq
# 输出文件 sample1_33.fq
vsearch --fastq_convert sample1.fq --fastq_ascii 64 --fastq_asciiout 33 --fastqout sample1_33.fq 
vsearch --fastq_convert sample2.fq --fastq_ascii 64 --fastq_asciiout 33 --fastqout sample2_33.fq 
vsearch --fastq_convert sample3.fq --fastq_ascii 64 --fastq_asciiout 33 --fastqout sample3_33.fq </code></pre>
<p>如果有 100 个文件呢？把命令写 100 遍，改200 次样本名。</p>
<p>倒也不是太难的事！</p>
<p>但应该有好一点的办法。</p>
<p>这就用到我们前面提到的<code>for</code>循环了。<code>for</code>循环有个固定格式<code>for .. in .. do .. done</code>，我们看看是怎么工作的。</p>
<pre><code>for i in `seq 1 3`; do echo $i; done</code></pre>
<p>这个命令本身没啥意义，只是展示<code>for</code>的语法，变量<code>i</code>依次被赋值为了<code>1,2,3</code>，并且打印了出来，输出为：</p>
<pre><code>1
2
3</code></pre>
<p>假如你的样本名正好是<code>sample1</code>, <code>sample2</code>, <code>sample3</code>，那可以套用下。</p>
<pre><code>for i in `seq 1 3`; do echo &quot;sample&quot;$i&quot;.fq&quot;; done</code></pre>
<p>输出为 各个样本的测序结果文件名</p>
<pre><code>sample1.fq
sample2.fq
sample3.fq</code></pre>
<p>这样就通过命令的方式实现了各个样本文件的遍历。下一步，怎么把上面转换编码格式的命令套进来呢？</p>
<pre><code># 把变量 i 把每次循环获得的值转换为样本名字
for i in `seq 1 3`; do vsearch --fastq_convert &quot;sample&quot;$i&quot;.fq&quot; --fastq_ascii 64 --fastq_asciiout 33 --fastqout &quot;sample&quot;$i&quot;_33.fq&quot;; done </code></pre>
<p>这个代码写好了，对不对呢，可以打印一下看看：</p>
<pre><code># 命令前加一个 echo
for i in `seq 1 3`; do echo vsearch --fastq_convert &quot;sample&quot;$i&quot;.fq&quot; --fastq_ascii 64 --fastq_asciiout 33 --fastqout &quot;sample&quot;$i&quot;_33.fq&quot;; done </code></pre>
<p>打印出来，与前面自己手写的比较下，一模一样。这样就实现了循环了，去掉 <code>echo</code> 就可以实际运行了。</p>
<pre><code>vsearch --fastq_convert sample1.fq --fastq_ascii 64 --fastq_asciiout 33 --fastqout sample1_33.fq
vsearch --fastq_convert sample2.fq --fastq_ascii 64 --fastq_asciiout 33 --fastqout sample2_33.fq
vsearch --fastq_convert sample3.fq --fastq_ascii 64 --fastq_asciiout 33 --fastqout sample3_33.fq</code></pre>
<p>假如样本名没有统一的规律，或者更复杂一些呢？</p>
<p>一般是需要准备一个<code>metadata.txt</code>的文件，里面至少包含两列信息，<code>样本名字</code>和<code>样本分组</code>。</p>
<p>需要注意的是：<em>metadata.txt中样本名字需要与样本的测序结果文件存在统一的对应关系</em></p>
<p><img src="image/sampleName.jpg" width="100%" style="display: block; margin: auto;" /></p>
<p>假如我们有4个样品，名字如下，我们写一个<code>metadata.txt</code>文件 (这里我们只用到了第一列)：</p>
<pre><code>Sample      Group
WT1      WT
WT2      WT
KO1      KO
KO2      KO</code></pre>
<p>对应的序列分别为<code>WT1.fq</code>, <code>WT2.fq</code>, <code>KO1.fq</code>, <code>KO2.fq</code>。</p>
<pre><code># 命令前加一个 echo
for i in `tail -n +2 metadata.txt | cut -f 1`; do echo vsearch --fastq_convert $i&quot;.fq&quot; --fastq_ascii 64 --fastq_asciiout 33 --fastqout $i&quot;_33.fq&quot;; done </code></pre>
<p>输出如下，可以直接拷贝运行，或去掉上面语句中的<code>echo</code>就可以直接运行了。</p>
<pre><code>vsearch --fastq_convert WT1.fq --fastq_ascii 64 --fastq_asciiout 33 --fastqout WT1_33.fq
vsearch --fastq_convert WT2.fq --fastq_ascii 64 --fastq_asciiout 33 --fastqout WT2_33.fq
vsearch --fastq_convert KO1.fq --fastq_ascii 64 --fastq_asciiout 33 --fastqout KO1_33.fq
vsearch --fastq_convert KO2.fq --fastq_ascii 64 --fastq_asciiout 33 --fastqout KO2_33.fq</code></pre>
<p><code>for</code>语句用起来方便，但样品多时只能所有样品串行运行或同时并行运行（当然也可能可以用<code>wait</code>控制并行的数量）。这里推荐另外一个工具<code>rush</code>, 这是重庆医科大学沈伟博士开发的一个并行工具，<a href="https://github.com/shenwei356/rush" class="uri">https://github.com/shenwei356/rush</a>，很好用。跨平台，免安装，下载即可用。</p>
<pre><code>tail -n+2 metadata.txt | cut -f1 | rush -j 2 \
      &quot;echo vsearch --fastq_convert {1}.fq --fastq_ascii 64 --fastq_asciiout 33 --fastqout {1}_33.fq&quot;</code></pre>
<p>运行输出如下，除了命令顺序有变化，看上去与<code>for</code>没什么不同。关键参数有 2 个：</p>
<ol style="list-style-type: decimal">
<li><code>-j 2</code>表示同时运行 2 个样本，所以下面的输出顺序才有些乱；如果去掉 <code>echo</code>，会发现同时有 2 个样本正在转换。当然这里的 2 可以改为任意非 0 的正数，控制同时运行的命令数目。</li>
<li><code>{1}</code>: 样本名会替换在这里。</li>
</ol>
<pre><code>vsearch --fastq_convert WT1.fq --fastq_ascii 64 --fastq_asciiout 33 --fastqout WT1_33.fq
vsearch --fastq_convert WT2.fq --fastq_ascii 64 --fastq_asciiout 33 --fastqout WT2_33.fq
vsearch --fastq_convert KO2.fq --fastq_ascii 64 --fastq_asciiout 33 --fastqout KO2_33.fq
vsearch --fastq_convert KO1.fq --fastq_ascii 64 --fastq_asciiout 33 --fastqout KO1_33.fq</code></pre>
<p>如果你习惯用<code>parallel</code>也可以。</p>
</div>
<div id="top" class="section level2 hasAnchor" number="1.10">
<h2><span class="header-section-number">1.10</span> 监控程序的运行时间和资源占用<a href="linux_basic.html#top" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<ol style="list-style-type: decimal">
<li>监测命令的运行时间 <code>time command</code></li>
</ol>
<pre><code>ct@ysx:~$ time sleep 5

real    0m5.003s # 程序开始至结束的时间，包括其它进程占用的时间片和IO时间
user    0m0.001s # 进程真正执行占用CPU的时间, 
sys 0m0.002s     # 进程在内核中调用所消耗的CPU时间
user+sys是进程实际的CPU时间。如果多线程执行，这个时间可能大于Real。如果IO是瓶颈，则real会大于user+sys (单线程)。</code></pre>
<ol start="2" style="list-style-type: decimal">
<li>查看正在运行的命令和其资源使用 <code>top</code></li>
</ol>
<ul>
<li>top输出界面第一行主要信息是负载显示，分别是1分钟、5分钟、15分钟前到现在的任务队列的平均长度。</li>
<li>一般与CPU数目相当为好，过大系统负载超额，反应慢。</li>
<li>在top输出界面输入 <code>u</code>, 会提示输入用户名，以查看某个用户的进程。</li>
<li>重点关注的是%MEM列，查看系统占用的内存是否超出。</li>
</ul>
<pre><code>ct@ysx:~$ top -a #按内存排序显示

top - 09:02:11 up 224 days,  8:34,  30 users,  load average: 40, 33, 28
Tasks: 1561 total,   1 running, 1550 sleeping,   0 stopped,  10 zombie
Cpu(s):  0.6%us,  0.2%sy,  0.0%ni, 99.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  2642768880k total, 2094619800k used, 548149080k free,   4310240k buffers
Swap: 86472700k total, 73226016k used, 13246684k free, 193383748k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                  
32527 ct        20   0 2631m 1.7g 1332 S  0.0  0.7 100:34.87 rsem-run-em 
29273 ct        20   0 4094m 692m 3396 S  0.0  0.3  45:18.83 java -Xmx1000m
40148 mysql     20   0 21.9g 606m 6116 S  1.3  0.2   2536:06 /usr/sbin/mysqld
31040 ct        20   0 1887m  77m 2604 S  0.3  0.0 180:43.16 [celeryd: </code></pre>
<ol start="3" style="list-style-type: decimal">
<li>查看系统进程 <code>ps auwx | grep  'process_name'</code></li>
</ol>
</div>
<div id="不同系统的换行符不兼容引发的问题" class="section level2 hasAnchor" number="1.11">
<h2><span class="header-section-number">1.11</span> 不同系统的换行符不兼容引发的问题<a href="linux_basic.html#%E4%B8%8D%E5%90%8C%E7%B3%BB%E7%BB%9F%E7%9A%84%E6%8D%A2%E8%A1%8C%E7%AC%A6%E4%B8%8D%E5%85%BC%E5%AE%B9%E5%BC%95%E5%8F%91%E7%9A%84%E9%97%AE%E9%A2%98" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<p>不同的操作系统使用的换行符不同，如 Windows 使用的换行符是<code>\r\n</code> (回车+换行), Unix/Linux使用的换行符是<code>\n</code> (换行)，Mac 使用的换行符是<code>\r</code> (回车)。</p>
<p>这么使用是有其历史渊源的，来源于打字机时代：</p>
<blockquote>
<p>电传打字机每秒钟可以打10个字符。但是它有一个问题，就是打完一行换行的时候要用掉0.2秒，正好可以打两个字符。</p>
<p>如果在这0.2秒里面，又有新的字符传过来，那么这个字符将会丢失。</p>
<p>于是科学家想了个办法解决这个问题，就是在每行后面加两个表示结束的字符，回车和换行：</p>
<p>回车，符号 <code>\r</code>；是告诉打字机把打印头定位在左边界；</p>
<p>换行，符号 <code>\n</code>；是告诉打字机把纸张向下方移动一行；</p>
</blockquote>
<p>电脑发明后，这一习惯就沿用了下来。但为了节省存储的空间，Unix 和 Mac 做了修改。</p>
<ul>
<li><p>在Unix/Linux系统中，行尾只使用换行符 <code>\n</code>，系统会自动加上<code>\r</code>实现 <code>回车+换行</code> 的操作；</p></li>
<li><p>在 Mac 系统中，行尾只使用回车符 <code>\r</code>，系统会自动加上 <code>\n</code>实现 <code>回车+换行</code> 的操作；</p></li>
</ul>
<p>这对我们通常也没什么影响，键盘上的<strong>Enter键</strong>自己会处理这个事情。</p>
<p>但如果我们跨系统传输和使用文件时，问题就出来了。</p>
<div id="winddows-的程序传到-linux不能运行" class="section level3 hasAnchor" number="1.11.1">
<h3><span class="header-section-number">1.11.1</span> Winddows 的程序传到 Linux不能运行<a href="linux_basic.html#winddows-%E7%9A%84%E7%A8%8B%E5%BA%8F%E4%BC%A0%E5%88%B0-linux%E4%B8%8D%E8%83%BD%E8%BF%90%E8%A1%8C" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>比如下面这个脚本<code>metaphlan_to_stamp.pl</code>，可能在 windows 下做了修改，保存时自动加了<code>\r</code>，而<code>\r</code>在 Unlix/Linux 上显示为<code>^M</code>，运行时弹出如下错误提示：</p>
<pre><code>metaphlan_to_stamp.pl: /usr/bin/perl^M 解释器错误：没有那个文件和目录</code></pre>
<p>找不到名字为<code>perl^M</code>的解释器，实际应该是用<code>perl</code>做解释器，因为这个是<code>perl</code>脚本。其它语言脚本也会有类似问题，如<code>bash^M</code>, <code>python^M</code>等。</p>
<p>怎么修改呢? 找到这个程序，把<code>\r</code>去掉即可。用下面的命令。</p>
<pre><code>sed -i &#39;s/\r//&#39; metaphlan_to_stamp.pl</code></pre>
<p>或</p>
<pre><code># 这是看到什么替换什么
# 但需要注意^M 不是^加 M，而是一个字符
# ^M的输入方式是 先按快捷键ctrl+v，再按快捷键ctrl+m，稍微麻烦一些
sed -i &#39;s/^M//&#39; metaphlan_to_stamp.pl</code></pre>
<p>有时不如果知道程序在什么地方，可以用<code>which</code>返回脚本的路径，直接替换</p>
<pre><code>sed -i &#39;s/\r//&#39; `which metaphlan_to_stamp.pl`</code></pre>
</div>
<div id="winddows-的数据传到-linux不能匹配" class="section level3 hasAnchor" number="1.11.2">
<h3><span class="header-section-number">1.11.2</span> Winddows 的数据传到 Linux不能匹配<a href="linux_basic.html#winddows-%E7%9A%84%E6%95%B0%E6%8D%AE%E4%BC%A0%E5%88%B0-linux%E4%B8%8D%E8%83%BD%E5%8C%B9%E9%85%8D" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>我们在做数据提取时，尤其是用<code>awk</code>时，也会遇到这样诡异的问题，代码没问题，测试数据也没问题，换上真实数据就是匹配不出来。</p>
<p>这时别着急，用<code>cat -A filename</code>查看下文件里面有没有特殊字符。也许是因为文件夸了系统捣的鬼。</p>
<p>像下面这个数据最后一列切出来的字符是<code>Cancer^M</code>而不是<code>Cancer</code>；如果用<code>Cancer</code>做<code>key</code>去匹配信息，是匹配不到的。</p>
<pre><code>SampleID^IGroup^M$
C1^ICancer^M$
C2^ICancer^M$</code></pre>
</div>
<div id="linux-的数据传到-windows-打开不换行" class="section level3 hasAnchor" number="1.11.3">
<h3><span class="header-section-number">1.11.3</span> Linux 的数据传到 Windows 打开不换行<a href="linux_basic.html#linux-%E7%9A%84%E6%95%B0%E6%8D%AE%E4%BC%A0%E5%88%B0-windows-%E6%89%93%E5%BC%80%E4%B8%8D%E6%8D%A2%E8%A1%8C" class="anchor-section" aria-label="Anchor link to header"></a></h3>
<p>Linux 生成的文件，传到 windows，如果用记事本打开，会出现都在一行的情况。尽量不要用记事本，装一个文本查看器，UltraEdit、Notepad 之类的。</p>
<p>Ref：<a href="https://blog.csdn.net/lijing742180/article/details/85018164" class="uri">https://blog.csdn.net/lijing742180/article/details/85018164</a></p>
<p><code>\r</code>的本意是回到行首</p>
</div>
</div>
<div id="references" class="section level2 hasAnchor" number="1.12">
<h2><span class="header-section-number">1.12</span> References<a href="linux_basic.html#references" class="anchor-section" aria-label="Anchor link to header"></a></h2>
<ul>
<li>原文链接 <a href="http://blog.genesino.com//2017/06/bash1/" class="uri">http://blog.genesino.com//2017/06/bash1/</a></li>
<li>微信公众号 <a href="http://mp.weixin.qq.com/s/yKP1Kboji9N4p2Sl1Ovj0Q" class="uri">http://mp.weixin.qq.com/s/yKP1Kboji9N4p2Sl1Ovj0Q</a></li>
<li><a href="http://mp.weixin.qq.com/s/hEYU80fPf1eD5OWL3fO4Bg">Linux-总目录</a></li>
<li><a href="http://mp.weixin.qq.com/s/yKP1Kboji9N4p2Sl1Ovj0Q">Linux-文件和目录</a></li>
<li><a href="http://mp.weixin.qq.com/s/4bYMzJclf_xHpqdrlbvAdA">Linux-文件操作</a></li>
<li><a href="http://mp.weixin.qq.com/s/QFgINAYcQA9kYYSA28wK-Q">Linux文件内容操作</a></li>
<li><a href="http://mp.weixin.qq.com/s/poFpNHQgHDr0qr2wqfVNdw">Linux-环境变量和可执行属性</a></li>
<li><a href="http://mp.weixin.qq.com/s/zL9Mw_2ig48gHrIjKM0CMw">Linux - 管道、标准输入输出</a></li>
<li><a href="http://mp.weixin.qq.com/s/TNU7X2mhfVVffaJ7NRBuNA">Linux - 命令运行监测和软件安装</a></li>
<li><a href="http://mp.weixin.qq.com/s/cDIN4_R4nETEB5irmIGFAQ">Linux-常见错误和快捷操作</a></li>
<li><a href="http://mp.weixin.qq.com/s/1QaroFE7AH1pREuq-k2YAw">Linux-文件列太多，很难识别想要的信息在哪列；别焦急，看这里。</a></li>
<li><a href="http://mp.weixin.qq.com/s/R1OHRhZoDJuAdyVdJr2xHg">Linux-文件排序和FASTA文件操作</a></li>
<li><a href="http://mp.weixin.qq.com/s/HLHiWMLaWtB7SOJe_jP3mA">Linux-应用Docker安装软件</a></li>
<li><a href="http://mp.weixin.qq.com/s/c2cspK5b4sQScWYMBtG63g">Linux服务器数据定期同步和备份方式</a></li>
<li><a href="https://mp.weixin.qq.com/s/4lUiZ60-aXLilRk9--iQhA">VIM的强大文本处理方法</a></li>
<li><a href="http://mp.weixin.qq.com/s/A4_j8ZbyprMr1TT_wgisQQ">Linux - Conda软件安装方法</a></li>
<li><a href="http://mp.weixin.qq.com/s/xq0JfkHJJeHQk1acjOAJUQ">查看服务器配置信息</a></li>
<li><a href="http://mp.weixin.qq.com/s/cywkIeRbhkYTZvkwTeIVSA">Linux - SED操作，awk的姊妹篇</a></li>
<li><a href="http://mp.weixin.qq.com/s/8wD14FXt7fLDo1BjJyT0ew">Linux - 常用和不太常用的实用awk命令</a></li>
<li><a href="http://mp.weixin.qq.com/s/lWNp_6W_jLiogmtlk9nO2A">Bash概论 - Linux系列教程补充篇</a></li>
<li><a href="https://mp.weixin.qq.com/s/q3ic5WSfLdAnqIhFQX-bUQ">原来你是这样的软连接</a></li>
<li><a href="https://mp.weixin.qq.com/s/xWwj04h4W6yEqQLOfuQ8qA?">一网打进Linux下那些查找命令</a></li>
<li><a href="https://mp.weixin.qq.com/s/hyiGxm0jx6xEc90nHLN4dQ">有了这些，文件批量重命名还需要求助其它工具吗？</a></li>
</ul>

</div>
</div>
            </section>

          </div>
        </div>
      </div>
<a href="index.html" class="navigation navigation-prev " aria-label="Previous page"><i class="fa fa-angle-left"></i></a>
<a href="softinstall.html" class="navigation navigation-next " aria-label="Next page"><i class="fa fa-angle-right"></i></a>
    </div>
  </div>
<script src="libs/gitbook-2.6.7/js/app.min.js"></script>
<script src="libs/gitbook-2.6.7/js/clipboard.min.js"></script>
<script src="libs/gitbook-2.6.7/js/plugin-search.js"></script>
<script src="libs/gitbook-2.6.7/js/plugin-sharing.js"></script>
<script src="libs/gitbook-2.6.7/js/plugin-fontsettings.js"></script>
<script src="libs/gitbook-2.6.7/js/plugin-bookdown.js"></script>
<script src="libs/gitbook-2.6.7/js/jquery.highlight.js"></script>
<script src="libs/gitbook-2.6.7/js/plugin-clipboard.js"></script>
<script>
gitbook.require(["gitbook"], function(gitbook) {
gitbook.start({
  "sharing": {
    "github": false,
    "facebook": false,
    "twitter": false,
    "linkedin": false,
    "weibo": false,
    "instapaper": false,
    "vk": false,
    "whatsapp": false,
    "all": ["facebook", "twitter", "linkedin", "weibo", "instapaper"]
  },
  "fontsettings": {
    "theme": "white",
    "family": "sans",
    "size": 2
  },
  "edit": {
    "link": null,
    "text": null
  },
  "history": {
    "link": null,
    "text": null
  },
  "view": {
    "link": null,
    "text": null
  },
  "download": ["Bash.pdf"],
  "search": {
    "engine": "fuse",
    "options": null
  },
  "toc": {
    "collapse": "subsection"
  }
});
});
</script>

</body>

</html>
